【问题标题】:Javascript Multidimensional JSON Access to data [duplicate]Javascript多维JSON访问数据[重复]
【发布时间】:2017-12-31 13:55:08
【问题描述】:

我像这样从 api 获取 json 数据:

{
    "function": "getCategoryItem",
    "version": "0.1",
    "returnCode": true,
    "errorCode": 0,
    "errorMessage": "",
    "result": {
        "_ITEM_": [
            {
                "itemId": 10000,
                "itemName": "Item Test\u00fc\u00e7\u011e\u00d6",
                "itemImageURL": "test.png",
                "itemDescription": "21testDESC",
                "itemPrice": 762
            },
            {
                "itemId": 10001,
                "itemName": "Item Test V2",
                "itemImageURL": "tiger.png",
                "itemDescription": "asfdjKDEWSC",
                "itemPrice": 552
            },
                        ],
        "_NAVIGATION_": [
            {
                "itemCount": 21,
                "totalCount": 21,
                "currentPage": 1,
                "navigationSize": 10,
                "pageSize": 10
            }
        ]
    }
}

但我无法访问 ITEM -> itemId 或 NAVIGATION -> currentPage 如何访问 ITEMNAVIGATION 使用 JavaScript?感谢您的帮助。

【问题讨论】:

  • 添加代码示例以显示您如何尝试访问这些属性
  • 我更新了问题,我的问题解决了。

标签: javascript json ajax


【解决方案1】:

首先,问题中的 JSON(如果它真的是 JSON,而不仅仅是一个对象文字)是无效的:它在 _ITEM_ 的第一个条目之后有一个尾随逗号,这在 JavaScript 中有效,但在 JSON 中无效。

一旦修复,假设您在某个阶段解析 JSON,此时它不再是 JSON,它是一个具有属性的对象(引用其他对象等)。在您的情况下,如果 data 指的是整个解析结果,您将像这样访问 _ITEM_

console.log(data.result._ITEM_[0].itemId); // 10000

活生生的例子:

var json =
    '{\n'+
    '    "function": "getCategoryItem",\n' +
    '    "version": "0.1",\n' +
    '    "returnCode": true,\n' +
    '    "errorCode": 0,\n' +
    '    "errorMessage": "",\n' +
    '    "result": {\n' +
    '        "_ITEM_": [\n' +
    '            {\n' +
    '                "itemId": 10000,\n' +
    '                "itemName": "Item Test\u00fc\u00e7\u011e\u00d6",\n' +
    '                "itemImageURL": "test.png",\n' +
    '                "itemDescription": "21testDESC",\n' +
    '                "itemPrice": 762\n' +
    '            },\n' +
    '            {\n' +
    '                "itemId": 10001,\n' +
    '                "itemName": "Item Test V2",\n' +
    '                "itemImageURL": "tiger.png",\n' +
    '                "itemDescription": "asfdjKDEWSC",\n' +
    '                "itemPrice": 552\n' +
    '            }\n' +
    //            ^-- This is where the invalid comma was
    '                        ],\n' +
    '        "_NAVIGATION_": [\n' +
    '            {\n' +
    '                "itemCount": 21,\n' +
    '                "totalCount": 21,\n' +
    '                "currentPage": 1,\n' +
    '                "navigationSize": 10,\n' +
    '                "pageSize": 10\n' +
    '            }\n' +
    '        ]\n' +
    '    }\n' +
    '}';
var data = JSON.parse(json);
console.log(data.result._ITEM_[0].itemId); // 10000

【讨论】:

  • 我能再问一个问题吗,你知道我怎样才能得到结果的计数,ITEM 变量。喜欢:ITEM = 2; 导航 = 1;结果 = 2;
  • @AhmetÇelikezer: _ITEM__NAVIGATION_ 只是数组。像所有数组一样,它们具有length 属性,例如:data.result._ITEM_.length。 (result 是一个非数组对象。它们没有长度。你可以得到它所具有的 own, enumerable 属性的总数[嗯,那些具有字符串名称的属性,他们将如果这最初是 JSON] 来自Object.keys(result).length.)
  • 好的,行得通!非常感谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多