像数组一样访问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) [重复]