キー値アイテムの配列を保存したいのですが、これを行う一般的な方法は次のようなものです:
// the JSON data may store several data types, not just key value lists,
// but, must be able to identify some data as a key value list
// --> more "common" way to store a key value array
{
[
{"key": "slide0001.html", "value": "Looking Ahead"},
{"key": "slide0008.html", "value": "Forecast"},
{"key": "slide0021.html", "value": "Summary"},
// another THOUSANDS KEY VALUE PAIRS
// ...
],
"otherdata" : { "one": "1", "two": "2", "three": "3" }
}
しかし、多くのペア/アイテムがある場合、文字列の長さは禁止され、コンパクトな方法が必要です、これは例です:
// --> (1) a "compact" way to store a key value array
{
[
{"slide0001.html", "Looking Ahead"},
{"slide0008.html", "Forecast"},
{"slide0021.html", "Summary"},
// another THOUSANDS KEY VALUE PAIRS
// ...
],
"otherdata" : { "one": "1", "two": "2", "three": "3" }
}
また、同じJSONファイルに他のデータを保存する場合があるため、データをキー値配列として識別する方法が必要です。私はこれらの例を持っています:
// --> (2) a "compact" way to store a key value array
{
"keyvaluelist":
[
{"slide0001.html", "Looking Ahead"},
{"slide0008.html", "Forecast"},
{"slide0021.html", "Summary"},
// another THOUSANDS KEY VALUE PAIRS
// ...
],
"otherdata" : { "one": "1", "two": "2", "three": "3" }
}
// --> (3) a "compact" way to store a key value array
{
"mylist":
{
"type": "keyvaluearray",
"data":
[
{"slide0001.html", "Looking Ahead"},
{"slide0008.html", "Forecast"},
{"slide0021.html", "Summary"},
// another THOUSANDS KEY VALUE PAIRS
// ...
]
},
"otherdata" : { "one": "1", "two": "2", "three": "3" }
}
あなたは何を提案しますか、あなたはどれを提案しますか、別の方法がありますか?ありがとう。
更新1:無効なコードを削除します。 Javascript => JSON
更新2:非キー値データを追加する
更新3:各キー値ペアの「{」と「}」を「[」と「]」に置き換えます
ロジックがこれを解析する場合knows that {"key": "slide0001.html", "value": "Looking Ahead"}
はキー/値のペアです。配列で変換し、どのインデックスをどのキーにマッピングするかを指定するいくつかの定数を保持できます。
例えば:
var data = ["slide0001.html", "Looking Ahead"];
var C_KEY = 0;
var C_VALUE = 1;
var value = data[C_VALUE];
したがって、データは次のようになります。
[
["slide0001.html", "Looking Ahead"],
["slide0008.html", "Forecast"],
["slide0021.html", "Summary"]
]
解析ロジックがデータの構造について事前に知らない場合は、メタデータを追加してそれを記述することができます。例えば:
{ meta: { keys: [ "key", "value" ] },
data: [
["slide0001.html", "Looking Ahead"],
["slide0008.html", "Forecast"],
["slide0021.html", "Summary"]
]
}
...これはパーサーによって処理されます。
それでは、単にキーと値のリテラルを使用しないのですか?
var params = {
'slide0001.html': 'Looking Ahead',
'slide0002.html': 'Forecase',
...
};
return params['slide0001.html']; // returns: Looking Ahead
私にとって、これは、すべてのキーが文字列であるという条件で、そのようなデータをJSONで構造化する最も「自然な」方法です。
{
"keyvaluelist": {
"slide0001.html": "Looking Ahead",
"slide0008.html": "Forecast",
"slide0021.html": "Summary"
},
"otherdata": {
"one": "1",
"two": "2",
"three": "3"
},
"anotherthing": "thing1",
"onelastthing": "thing2"
}
私はこれを
a JSON object with four elements
element 1 is a map of key/value pairs named "keyvaluelist",
element 2 is a map of key/value pairs named "otherdata",
element 3 is a string named "anotherthing",
element 4 is a string named "onelastthing"
もちろん、最初の要素または2番目の要素は、それぞれ3つの要素を持つオブジェクト自体として説明することもできます。
JSONでキーと値のペアを使用するには、オブジェクトを使用し、配列を使用しないでください
配列内の名前/値を見つけるのは難しいが、オブジェクト内で見つけるのは簡単
例:
var exObj = {
"mainData": {
"slide0001.html": "Looking Ahead",
"slide0008.html": "Forecast",
"slide0021.html": "Summary",
// another THOUSANDS KEY VALUE PAIRS
// ...
},
"otherdata" : { "one": "1", "two": "2", "three": "3" }
};
var mainData = exObj.mainData;
// for use:
Object.keys(mainData).forEach(function(n,i){
var v = mainData[n];
console.log('name' + i + ': ' + n + ', value' + i + ': ' + v);
});
// and string length is minimum
console.log(JSON.stringify(exObj));
console.log(JSON.stringify(exObj).length);