Je veux stocker un tableau d'éléments de valeur clés, une façon courante de le faire pourrait être quelque chose comme:
// 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" }
}
Mais, quand il y a beaucoup de paires/items, la longueur de chaîne devient interdite, .__ et je veux un moyen compact, ceci pourrait être un exemple:
// --> (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" }
}
De plus, je veux un moyen d'identifier les données en tant que tableau de valeurs de clé, .__, car je souhaiterais peut-être stocker d'autres données dans le même fichier JSON J'ai ces exemples:
// --> (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" }
}
Qu'est-ce que vous pensez, lequel suggérez-vous, avez-vous un autre moyen? Merci.
UPDATE 1: Supprimez le code non valide. Javascript => JSON
UPDATE 2: Ajouter des données non clés
UPDATE 3: Remplacer "[" et "]" par "{" et "}" dans chaque paire de valeurs de clé
Si la logique analysant ce sait que {"key": "slide0001.html", "value": "Looking Ahead"}
est une paire clé/valeur, vous pouvez le transformer en tableau et conserver quelques constantes indiquant quel index correspond à quelle clé.
Par exemple:
var data = ["slide0001.html", "Looking Ahead"];
var C_KEY = 0;
var C_VALUE = 1;
var value = data[C_VALUE];
Alors, maintenant, vos données peuvent être:
[
["slide0001.html", "Looking Ahead"],
["slide0008.html", "Forecast"],
["slide0021.html", "Summary"]
]
Si votre logique d'analyse ne connaît pas à l'avance la structure des données, vous pouvez ajouter des métadonnées pour la décrire. Par exemple:
{ meta: { keys: [ "key", "value" ] },
data: [
["slide0001.html", "Looking Ahead"],
["slide0008.html", "Forecast"],
["slide0021.html", "Summary"]
]
}
... qui serait ensuite traité par l'analyseur.
Alors, pourquoi ne pas simplement utiliser un littéral valeur-clé?
var params = {
'slide0001.html': 'Looking Ahead',
'slide0002.html': 'Forecase',
...
};
return params['slide0001.html']; // returns: Looking Ahead
Pour moi, il s'agit du moyen le plus "naturel" de structurer de telles données en JSON, à condition que toutes les clés soient des chaînes.
{
"keyvaluelist": {
"slide0001.html": "Looking Ahead",
"slide0008.html": "Forecast",
"slide0021.html": "Summary"
},
"otherdata": {
"one": "1",
"two": "2",
"three": "3"
},
"anotherthing": "thing1",
"onelastthing": "thing2"
}
Je lis ceci comme
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"
Le premier élément ou le deuxième élément pourrait également être décrit comme des objets eux-mêmes, bien entendu, avec trois éléments chacun.
Pour utiliser une paire clé/valeur dans json, utilisez un objet et n'utilisez pas de tableau
Trouver un nom/une valeur dans un tableau est difficile, mais facile dans un objet
Ex:
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);