我以前从未使用过JSON,所以我对它的语法不熟悉。
目前,我有多个包含不同数据的数组。
我想创建一个JSON对象,其中包含多个数组,每个数组包含几段数据。
例如
一个称为汽车的对象,其中包含用于不同汽车品牌的多个数组。在每个数组中,将是汽车的模型以及其他一些类型的数据,例如门的数量(这只是一个虚构的例子,并不重要)。
如果有人用示例解释语法,将不胜感激。
Answers:
在最外层,JSON对象以a开头,以a{
结尾}
。
样本数据:
{
"cars": {
"Nissan": [
{"model":"Sentra", "doors":4},
{"model":"Maxima", "doors":4},
{"model":"Skyline", "doors":2}
],
"Ford": [
{"model":"Taurus", "doors":4},
{"model":"Escort", "doors":4}
]
}
}
如果将JSON分配给名为data的变量,则对其进行访问将类似于以下内容:
data.cars['Nissan'][0].model // Sentra
data.cars['Nissan'][1].model // Maxima
data.cars['Nissan'][2].doors // 2
for (var make in data.cars) {
for (var i = 0; i < data.cars[make].length; i++) {
var model = data.cars[make][i].model;
var doors = data.cars[make][i].doors;
alert(make + ', ' + model + ', ' + doors);
}
}
另一种方法(对汽车模型使用关联数组而不是索引数组):
{
"cars": {
"Nissan": {
"Sentra": {"doors":4, "transmission":"automatic"},
"Maxima": {"doors":4, "transmission":"automatic"}
},
"Ford": {
"Taurus": {"doors":4, "transmission":"automatic"},
"Escort": {"doors":4, "transmission":"automatic"}
}
}
}
data.cars['Nissan']['Sentra'].doors // 4
data.cars['Nissan']['Maxima'].doors // 4
data.cars['Nissan']['Maxima'].transmission // automatic
for (var make in data.cars) {
for (var model in data.cars[make]) {
var doors = data.cars[make][model].doors;
alert(make + ', ' + model + ', ' + doors);
}
}
编辑:
校正:JSON对象开始于{
并用端部}
,但它也适用于具有JSON阵列(最外层),与开始[
和有端]
。
此外,原始JSON数据中的重大语法错误也已得到纠正:JSON对象中的所有键名都必须用双引号引起来,并且JSON对象或JSON数组中的所有字符串值也必须用双引号引起来。
看到:
[0,1,2]
而关联数组使用大括号{x:1,y:2,z:3}
。最外层对象中的任何数据都可以是数组的任何一种,但是最外层对象本身必须使用花括号。
for (var town in markers.towns) { alert(markers.towns[town].lat) }
我正在阅读的好书:Nicholas C. Zakas第三版的Web开发人员专业JavaScript具有以下有关JSON语法的信息:
“ JSON语法允许表示三种类型的值”。
对于您感兴趣的那个,它说:
“数组使用JavaScript中的数组文字表示法以JSON表示。例如,这是JavaScript中的数组:
var values = [25, "hi", true];
您可以使用类似的语法在JSON中表示相同的数组:
[25, "hi", true]
请注意,没有变量或分号。数组和对象可以一起使用,以表示更复杂的数据集合,例如:
{
"books":
[
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
"edition": 3,
"year": 2011
},
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C.Zakas"
],
"edition": 2,
"year": 2009
},
{
"title": "Professional Ajax",
"authors": [
"Nicholas C. Zakas",
"Jeremy McPeak",
"Joe Fawcett"
],
"edition": 2,
"year": 2008
}
]
}
该数组包含许多表示书籍的对象,每个对象都有几个键,其中一个是“作者”,另一个是数组。对象和数组通常是JSON数据结构的顶层部分(即使不是必需的),并且可以用于创建大量数据结构。”
要将JavaScript对象序列化(转换)为JSON字符串,可以使用JSON对象stringify()方法。对于Mark Linus的示例,请回答:
var cars = [{
color: 'gray',
model: '1',
nOfDoors: 4
},
{
color: 'yellow',
model: '2',
nOfDoors: 4
}];
cars现在是一个JavaScript对象。要将其转换为JSON对象,您可以执行以下操作:
var jsonCars = JSON.stringify(cars);
产生:
"[{"color":"gray","model":"1","nOfDoors":4},{"color":"yellow","model":"2","nOfDoors":4}]"
要执行相反的操作,请将JSON对象转换为JavaScript对象(这称为解析),则可以使用parse()方法。如果您需要更多信息,请搜索这些术语...或获取该书,其中包含许多示例。
另一个例子:
[
[
{
"@id":1,
"deviceId":1,
"typeOfDevice":"1",
"state":"1",
"assigned":true
},
{
"@id":2,
"deviceId":3,
"typeOfDevice":"3",
"state":"Excelent",
"assigned":true
},
{
"@id":3,
"deviceId":4,
"typeOfDevice":"júuna",
"state":"Excelent",
"assigned":true
},
{
"@id":4,
"deviceId":5,
"typeOfDevice":"nffjnff",
"state":"Regular",
"assigned":true
},
{
"@id":5,
"deviceId":6,
"typeOfDevice":"44",
"state":"Excelent",
"assigned":true
},
{
"@id":6,
"deviceId":7,
"typeOfDevice":"rr",
"state":"Excelent",
"assigned":true
},
{
"@id":7,
"deviceId":8,
"typeOfDevice":"j",
"state":"Excelent",
"assigned":true
},
{
"@id":8,
"deviceId":9,
"typeOfDevice":"55",
"state":"Excelent",
"assigned":true
},
{
"@id":9,
"deviceId":10,
"typeOfDevice":"5",
"state":"Excelent",
"assigned":true
},
{
"@id":10,
"deviceId":11,
"typeOfDevice":"5",
"state":"Excelent",
"assigned":true
}
],
1
]
$.each(data[0], function(i, item) {
data[0][i].deviceId + data[0][i].typeOfDevice + data[0][i].state + data[0][i].assigned
});
使用http://www.jsoneditoronline.org/更好地了解JSON代码
var cars = [
manufacturer: [
{
color: 'gray',
model: '1',
nOfDoors: 4
},
{
color: 'yellow',
model: '2',
nOfDoors: 4
}
]
]
cars
> manufacturer
> model, color, doors
。(对象内的数组内的数组)
使用以下方法传递任何值,该值是任何数组:
输入参数:url,例如:“ / node / [数组的任何int值] / anyKeyWhichInArray”例如:“ cars / Nissan / [0] / model”
它可以用于任何响应:
public String getResponseParameterThroughUrl(Response r, String url) throws JsonProcessingException, IOException {
String value = "";
String[] xpathOrder = url.split("/");
ObjectMapper objectMapper = new ObjectMapper();
String responseData = r.getBody().asString();
JSONObject jsonObject = new JSONObject(responseData);
byte[] jsonData = jsonObject.toString().getBytes();
JsonNode rootNode = objectMapper.readTree(jsonData);
JsonNode node = null;
for(int i=1;i<xpathOrder.length;i++) {
if(node==null)
node = rootNode;
if(xpathOrder[i].contains("[")){
xpathOrder[i] = xpathOrder[i].replace("[", "");
xpathOrder[i] = xpathOrder[i].replace("]", "");
node = node.get(Integer.parseInt(xpathOrder[i]));
}
else
node = node.path(xpathOrder[i]);
}
value = node.asText();
return value;
}