繁体   English   中英

在打字稿中将 JSON 转换为字符串数组

[英]convert a JSON to a string array in typescript

我觉得我有一个很简单的问题,但我没有得到答案......我用 JSON.parse 将来自我的服务器的响应的 .text() 解析为 JSON。 我实际上可以通过以下方式访问该 JSON 的值: this.temp[0].name 现在我只想遍历该 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;
}

我会尝试类似的东西

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(...);

首先,您将 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM