在Typescript中解析JSON数组

Jen*_*abs 5 json typescript ionic2

我以这种方式从远程服务器获得JSON响应:

{
  "string": [
    {
      "id": 223,
      "name": "String",
      "sug": "string",
      "description": "string",
      "jId": 530,
      "pcs": [{
        "id": 24723,
        "name": "String",
        "sug": "string"
      }]
    }, {
      "id": 247944,
      "name": "String",
      "sug": "string",
      "description": "string",
      "jlId": 531,
      "pcs": [{
        "id": 24744,
        "name": "String",
        "sug": "string"
      }]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

为了解析响应,列出"名称"和"描述",我已经写出了这个代码:

interface MyObj {
  name: string
  desc: string
}
let obj: MyObj = JSON.parse(data.toString());
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在可以显示的列表中获取名称和描述.

Yar*_*min 10

您为解析的数据提供了错误的类型.应该是这样的:

interface MyObj {
  name: string
  description: string
}

let obj: { string: MyObj[] } = JSON.parse(data.toString());
Run Code Online (Sandbox Code Playgroud)

所以它不是MyObj,它的属性string包含数组的对象MyObj.你可以像这样访问这些数据:

console.log(obj.string[0].name, obj.string[0].description);
Run Code Online (Sandbox Code Playgroud)

您也可以interface为它定义:而不是使用匿名类型:

interface MyRootObj {
  string: MyObj[];
}

let obj: MyRootObj = JSON.parse(data.toString());
Run Code Online (Sandbox Code Playgroud)

  • 对已经很好的答案的补充说明:不能保证 `JSON.parse`d 数据确实符合解析后定义的接口。如果服务器突然发送其他数据,它可能不再符合它,通过以前预期的接口访问数据可能会导致崩溃。因此,始终建议在解析和使用数据之间验证数据。 (2认同)