Я никогда раньше не использовал JSON, поэтому не знаком с его синтаксисом.
На данный момент у меня есть несколько массивов, содержащих разные данные.
Я хотел бы создать один объект JSON, содержащий несколько массивов, каждый с несколькими частями данных.
Например
Объект с именем cars, содержащий несколько массивов автомобилей разных марок. В каждом массиве будет модель автомобиля вместе с некоторыми другими типами данных, например, количеством дверей (на самом деле это не имеет значения, это просто вымышленный пример).
Мы были бы очень признательны, если бы кто-нибудь объяснил синтаксис на примере.
Ответы:
На самом внешнем уровне объект JSON начинается с
{
и заканчивается}
.Пример данных:
{ "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) }
Хорошая книга, которую я читаю: «Профессиональный JavaScript для веб-разработчиков» Николаса К. Закаса, 3-е издание, содержит следующую информацию о синтаксисе JSON:
Что касается того, что вас интересует, Arrays говорит:
var values = [25, "hi", true];
[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 } ] }
Чтобы сериализовать (преобразовать) объект JavaScript в строку JSON, вы можете использовать метод Stringify () объекта JSON. Например, ответ Марка Линуса:
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; }
источник