0

我在一个对象中有一些 JSON,但我似乎可以返回 json 样本的值,如下所示。

{
"rootLayout":"main",
"layoutDescriptions":[
{
  "id":"main",
  "container" : {
    "type":"Tabs",
    "content":[
      {
        "type":"Panel",
        "label":"Simple Address",
        "layout":"SimpleForm",
        "comment":"This form is simple name value pairs",
        "content":[
          { "type":"label", "constraint":"newline", "text":"Org Name" },
          { "type":"text", "property":"propOne" },
          { "type":"label", "constraint":"newline", "text":"Address" },
          { "type":"text", "property":"addrLine1" },
          { "type":"text", "property":"addrLine2" },
          { "type":"text", "property":"addrLine3" },
          { "type":"label", "constraint":"newline", "text":"Postcode" },
          { "type":"text", "property":"postcode" }
        ]
      },

我正在尝试使用返回 rootLayout

 obj[0].rootLayout.id

这也不起作用我想知道如何访问内容元素。

我是 json 的新手,我认为我已经陷入了困境。我在互联网上找不到任何好的读物,谁能推荐一些。

谢谢。

4

3 回答 3

12

一些解释,因为您似乎不了解 JSON

它并不像人们想象的那么复杂。它实际上表示 javascript 对象,就好像它们是由代码编写的一样。

因此,如果您将 JSON 写为:

{
    id : 100,
    name: "Yeah baby"
}

这意味着您的对象有两个属性:idname。第一个是数字,第二个是字符串。

在您的示例中,您可以看到您的对象有两个属性:rootLayoutlayoutDescriptions. 第一个jsonObj.rootLayout是字符串,将返回"main",第二个是数组:

layoutDescriptions: [ {...}, {...},... ]

显然是一个对象数组,因为数组元素用花括号括起来。您在示例中提供的这个特定数组元素对象具有自己的属性,就像我为顶级对象所解释的那样:(id字符串)、container(另一个对象,因为它再次包含在花括号中)等等......

我希望你对 JSON 表示法有更多的了解。

那么让我们来回答你的问题

您可以id通过以下方式访问它:

jsonObj.layoutDescriptions[0].id

并进一步获取您的内容对象:

var contentObjects = jsonObj.layoutDescriptions[0].container.content[0].content;
for(var i = 0; i < contentObjects.length, i++)
{
    // assign this inner object to a variable for simpler property access
    var contObj = contentObjects[i];

    // do with this object whatever you need to and access properties as
    // contObj.type
    // contObj.property
    // contObj.text
    // contObj.constraint
}

请注意,这只会枚举第一个内容对象的内容对象......如果这有意义......那么看看你的 JSON 对象,你会发现你有嵌套的内容对象数组。

于 2012-08-08T09:22:54.017 回答
2

该对象是一个对象,而不是一个数组,并且它没有一个名为 的属性0

得到rootLayout

obj.rootLayout

但是,rootLayout是一个字符串,而不是一个对象。它没有id. layoutDescriptions数组中的第一项确实如此。

obj.layoutDescriptions[0].id
于 2012-08-08T09:21:58.053 回答
1

你想得到一个等于layoutDescriptions吗?idobj.rootLayout

var targetLayout = {};
for(var i = 0; i < obj.layoutDescriptions.length; i++) {
    if(obj.layoutDescriptions[i].id == obj.rootLayout) {
        targetLayout = obj.layoutDescriptions[i]; break; 
    }
}

console.log(targetLayout);
于 2012-08-08T09:25:56.697 回答