在打字稿中将 JSON 转换为字符串数组
Posted
技术标签:
【中文标题】在打字稿中将 JSON 转换为字符串数组【英文标题】:convert a JSON to a string array in typescript 【发布时间】:2016-09-10 05:23:20 【问题描述】:我觉得我有一个很简单的问题,但我就是没有得到答案......
我使用 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:如何将正文文本部分的值放入字符串数组中?
提前致谢
【问题讨论】:
【参考方案1】:如果响应是您包含的内容,那么很简单:
JSON.parse(data.text()).forEach(item =>
console.log(item.name);
);
因为你的 body 是这个接口的对象数组:
interface ObjectInResponseArray
name: string;
【讨论】:
【参考方案2】:首先,您将 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
loops吗?它们是 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
【讨论】:
【参考方案3】:我会尝试类似的东西
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")
)
希望对你有帮助
【讨论】:
【参考方案4】:使用map
:
this._pS.getAllProjects()
.map(resp => resp.json())
.map(json => json.map(project => project.name)).subscribe(...);
【讨论】:
以上是关于在打字稿中将 JSON 转换为字符串数组的主要内容,如果未能解决你的问题,请参考以下文章
在javascript中将数字转换为数组| angular7的打字稿[重复]