像数组一样访问json对象中的元素[重复]

Posted

技术标签:

【中文标题】像数组一样访问json对象中的元素[重复]【英文标题】:Access elements in json object like an array [duplicate] 【发布时间】:2013-01-02 17:10:41 【问题描述】:

可能重复:I have a nested data structure / JSON, how can I access a specific value?

我有一个 json 对象,如下所示:

[
  ["Blankaholm", "Gamleby"],
  ["2012-10-23", "2012-10-22"],
  ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har.],
  ["57.586174","16.521841"], ["57.893162","16.406090"]
]

它由 4 个“属​​性级别”(城市、日期、描述和坐标)组成。

我想要做的是能够像这样在数组中访问这些级别:

var coordinates = jsonObject[4];

这显然不起作用,所以我的问题是我该怎么做?

我需要解码它吗?如果需要,如何解码?

【问题讨论】:

严格来说这不是 JSON 对象。那是一个数组数组。 @NemesisX00 严格来说,它是完全有效的 JSON:***.com/questions/5034444/can-a-json-start-with @GeorgeP 这是有效的 JSON。但不是 JSON 对象。 @NemesisX00 没有 JSON 对象这样的东西。 您是否有理由避免使用普通的 key:value 语法?看起来就像jsonObj = [ "city": "Gamleby", "date": "2012-10-23", "description": "...", "coordinates": [54.xx, 16.xx], ...] 一样容易 【参考方案1】:

我找到了解决这个问题的直接方法,使用 JSON.parse。

假设下面的 json 在变量 jsontext 内。

[
  ["Blankaholm", "Gamleby"],
  ["2012-10-23", "2012-10-22"],
  ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har.],
  ["57.586174","16.521841"], ["57.893162","16.406090"]
]

解决办法是这样的:

var parsedData = JSON.parse(jsontext);

现在我可以通过以下方式访问元素:

var cities = parsedData[0];

【讨论】:

+1 啊,这个网站上最懂 JSON 是什么的人! ...哦,原来是OP! :D 在这种情况下,解析后的数据与原始数据相同(减去第 3 个索引中缺少的双引号)。 JSON.parse() 将用于将此对象的字符串表示形式转换回对象(或JSON.stringify() 的结果) @JeffreySweeney:OP 收到 JSON 数据作为对 AJAX 请求的响应,或者来自 cookie 或类似的东西,并且需要对其进行解析。原始数据以 Unicode 文本的形式到达,经过解析,在程序中使用。这就是 JSON 的重点。如果它是 var 语句的一部分(而不是存储为字符串),那么它不是 JSON。如果它以字符串形式存储在var 中,那就太奇怪了。【参考方案2】:

你的似乎是一个多数组,而不是 JSON 对象。

如果您想像访问数组一样访问对象,则必须使用某种键/值,例如:

var JSONObject = 
  "city": ["Blankaholm, "Gamleby"],
  "date": ["2012-10-23", "2012-10-22"],
  "description": ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har.],
  "lat": ["57.586174","16.521841"], 
  "long": ["57.893162","16.406090"]

并通过以下方式访问它:

JSONObject.city[0] // => Blankaholm
JSONObject.date[1] // => 2012-10-22

and so on...

JSONObject['city'][0] // => Blankaholm
JSONObject['date'][1] // => 2012-10-22

and so on...

或者,如果你不想改变你的结构,你可以做这样的事情:

var JSONObject = 
  "data": [
    ["Blankaholm, "Gamleby"],
    ["2012-10-23", "2012-10-22"],
    ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har.],
    ["57.586174","16.521841"], 
    ["57.893162","16.406090"]
  ]


JSONObject.data[0][1] // => Gambleby

【讨论】:

这种方法也更具可扩展性/可预测性。您可以通过for( in ) 循环来横向处理对象中的字段。 是的@JeffreySweeney,事实上第一个例子是我建议的那种数据结构。 您正在编写 javascript 数据结构作为 JavaScript 程序的一部分。问题指出显示的结构是 JSON 数据,而不是 JavaScript 程序。数据需要经过解析才能使用。 @thesystem 我把它写成 JavaScript 变量来说明这个例子。如果您删除var jsonObject并将数据结构放入JSON字符串中进行解析,则它是有效的JSON。 这并不清楚 OP 是否有 JSON 数据。它使它看起来好像不需要解析。【参考方案3】:

我注意到一些语法错误,但除此之外,它应该可以正常工作:

var arr = [
  ["Blankaholm", "Gamleby"],
  ["2012-10-23", "2012-10-22"],
  ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har."], //<- syntax error here
  ["57.586174","16.521841"], ["57.893162","16.406090"]
];


console.log(arr[4]);    //["57.893162","16.406090"]
console.log(arr[4][0]); //57.893162

【讨论】:

【参考方案4】:
var coordinates = [jsonObject[3][0], 
                   jsonObject[3][0],
                   jsonObject[4][1], 
                   jsonObject[4][1]];

【讨论】:

以上是关于像数组一样访问json对象中的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

访问 JSON 数组中的对象 (JavaScript) [重复]

如何迭代由json对象中的键访问的数组[重复]

在不知道键名的情况下访问 JSON 对象的元素

从数组中的 JSON 对象中删除属性 [重复]

如何创建对象数组或使用模型,就像我们在 JSON 中一样 - Angular/Ionic

jsonarray转成对象中的字段不一样