私はこれまでJSONを使用したことがないので、その構文に精通していません。
現在、さまざまなデータを含む複数の配列があります。
それぞれが複数のデータを持つ複数の配列を含む1つのJSONオブジェクトを作成したいと思います。
例えば
車と呼ばれるオブジェクト。それぞれ異なる車種の複数の配列が含まれています。各配列には、車のモデルと、ドアの数などの他のタイプのデータが含まれます(架空の例だけでは問題ありません)。
誰かが例を使って構文を説明していただければ幸いです。
私はこれまでJSONを使用したことがないので、その構文に精通していません。
現在、さまざまなデータを含む複数の配列があります。
それぞれが複数のデータを持つ複数の配列を含む1つのJSONオブジェクトを作成したいと思います。
例えば
車と呼ばれるオブジェクト。それぞれ異なる車種の複数の配列が含まれています。各配列には、車のモデルと、ドアの数などの他のタイプのデータが含まれます(架空の例だけでは問題ありません)。
誰かが例を使って構文を説明していただければ幸いです。
回答:
最も外側のレベルでは、JSONオブジェクトは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という変数に割り当てられている場合、JSONへのアクセスは次のようになります。
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);
}
}
編集:
訂正:A 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 3rdEditionによるWeb開発者向けのプロフェッショナルJavaScriptには、JSON構文に関する次の情報があります。
「JSON構文では、3種類の値を表現できます」。
あなたが興味を持っているものに関して、それが言う配列:
「配列は、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
}
]
}
この配列には、本を表す多数のオブジェクトが含まれています。各オブジェクトにはいくつかのキーがあり、そのうちの1つは「作成者」であり、これは別の配列です。オブジェクトと配列は通常、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
});
JSONコードをよりよく理解するには、http://www.jsoneditoronline.org/を使用してください
以下のメソッドを使用して、任意の配列である任意の値を渡します。
入力パラメーター: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;
}