【问题标题】:convert a JSON to a string array in typescript在打字稿中将 JSON 转换为字符串数组
【发布时间】: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:如何将正文文本部分的值放入字符串数组中?

提前致谢

【问题讨论】:

    标签: javascript arrays json typescript angular


    【解决方案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(...);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-19
            • 2020-12-27
            • 2018-06-14
            • 2023-03-10
            • 2018-04-26
            • 2019-10-30
            • 1970-01-01
            • 2020-05-08
            相关资源
            最近更新 更多