将JSON转换为typescript中的字符串数组

convert a JSON to a string array in typescript

本文关键字:字符串 数组 typescript JSON 转换      更新时间:2023-09-26

我觉得我有一个很简单的问题,但我就是找不到答案。。。我使用JSON.parse将来自服务器的响应的.text()解析为JSON。实际上,我可以用this.temp[0].name访问JSON的值。现在我只想对JSON进行迭代,并将值推送到字符串数组中。但是我怎样才能做到这一点呢?

当我尝试使用for...of时,编译器想要一个字符串或数组,而不是JSON。当我尝试使用for...in时,它实际上并没有进入循环。

这里有一些代码,我可以很好地访问它:

       this._pS.getAllProjects()
        .subscribe(data => this.temp = JSON.parse(data.text()),
            err => console.log(err),
            () => console.log("hello " + this.temp[0].name + this.temp[1].name));

当我刚在.stringify()后打印出来时:

        this._pS.getAllProjects()
        .subscribe(data => this.temp = JSON.stringify(data),
            err => console.log(err),
            () => console.log("hello " + this.temp));

我在浏览器控制台上得到这个:

{"_body":"[{'"name'":'"Projekt A'"},{'"name'":'"Projekt XYZ'"}]",
"status":200,
"ok":true,
"statusText":"Ok",
"headers":{"Content-Type":["application/json; charset=utf-8"]},
"type":2,
"url":"http://127.0.0.1:3000/api/getAllProjectNames"}

tl;dr:如何将正文文本部分的值转换为字符串数组

提前感谢

如果响应是您包含的,那么很简单:

JSON.parse(data.text()).forEach(item => {
    console.log(item.name);
});

因为你的身体是这个界面的一系列物体:

interface ObjectInResponseArray {
    name: string;
}

首先,您要混合JSON和对象。JSON是一种用于传输数据的文本格式。一旦解析了它(JSON.parse),就得到了一个对象或数组,这取决于JSON的内容。

var json = "{'"key'": '"value'" }";
var object = JSON.parse(json);
json = "[1, 2, '"three'"]";
var array = JSON.parse(json);

接下来,看起来你已经有了一个对象。如果执行JSON.stringify,则将对象转换为字符串。因此,您可以直接访问data对象。不需要以这样或那样的方式转换。

console.log(data._body[0]);

你熟悉for循环吗?它们是在JavaScript中迭代数组的最常见方式(实际上也是大多数语言)。例如:

var objs = [
  {
    name: 'Bugs'
  },
  {
    name: 'Bunny'
  }
];
for (var i = 0; i < objs.length; i++) {
  var obj = objs[i];
  console.log(obj.name);
}

考虑到所有这些,您应该能够对data._body数组进行迭代,并访问每个元素的name属性。

由于您的问题有点不清楚,您可能需要迭代data.text()的解析内容。

var objs = JSON.parse(data.text());
// Use a simple loop like above

我会尝试类似的东西

this._pS.getAllProjects()
        .subscribe(resp => {
                 this.temp = resp.json();
                 console.log("hello " + this.temp[0].name + this.temp[1].name);
            },
            err => console.log(err),
            () => console.log("getAllProjectsDone")
)

我希望这能帮助

使用map:

this._pS.getAllProjects()
        .map(resp => resp.json())
        .map(json => json.map(project => project.name)).subscribe(...);