2011-06-18 11 views
9

chcę zapisać tablicy elementów wartości klucza, wspólny sposób to zrobić to może być coś takiego:Przechowywanie kluczową wartością tablicy do kompaktowej ciąg JSON

// 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" } 
} 

Ale, gdy istnieje wiele par/przedmiotów, długość łańcuch zostaje zakazane, i chcę zwarty sposób, może to być na przykład:

// --> (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" } 
} 

Dodatkowo, chcę sposób identyfikowania danych jako keyvalue tablicy ponieważ może chcę do przechowywania innych danych w tym samym pliku JSON. mam te przykłady:

// --> (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" } 
} 

Co pan coś, co jeden pan proponuje, masz inny sposób? Dzięki.

UPDATE 1: Usuń nieprawidłowy kod. Javascript => JSON

UPDATE 2: Dodaj non dane wartości klucza

UPDATE 3: Wymień "[" i "]" na "{" i "}" w każdej parze kluczowej wartości

+0

W twoim kodzie nie ma ani jednej linii JSON. Tylko obiekty JavaScript. –

+0

@Felix Kling. Dzięki. Usuwam niepoprawny kod, który go tworzy, taki jak JS zamiast JSon – umlcat

+0

To wciąż nie jest JSON. W JSON każdy klucz (i ciąg) musi być w podwójnych cudzysłowach i coś takiego jak "param =" nie istnieje. –

Odpowiedz

8

Jeśli logika analizowania tego wie że {"key": "slide0001.html", "value": "Looking Ahead"} jest parę klucz/wartość, a następnie można przekształcić go w tablicy i przytrzymaj kilka stałych określające która mapy indeksów, do których klucz.

Na przykład:

var data = ["slide0001.html", "Looking Ahead"]; 

var C_KEY = 0; 
var C_VALUE = 1; 

var value = data[C_VALUE]; 

Więc teraz, Twoje dane mogą być:

[ 
    ["slide0001.html", "Looking Ahead"], 
    ["slide0008.html", "Forecast"], 
    ["slide0021.html", "Summary"] 
] 

Jeśli logika parsowanie nie wiedzieć z wyprzedzeniem o strukturze danych, można dodaj niektóre metadane, aby je opisać. Na przykład:

{ meta: { keys: [ "key", "value" ] }, 
    data: [ 
    ["slide0001.html", "Looking Ahead"], 
    ["slide0008.html", "Forecast"], 
    ["slide0021.html", "Summary"] 
    ] 
} 

... który następnie będzie obsługiwany przez analizator składni.

+0

Jego przypadek "nie wie z góry o strukturze danych". Dzięki – umlcat

11

Więc dlaczego czy po prostu nie używasz literału klucz-wartość?

var params = { 
    'slide0001.html': 'Looking Ahead', 
    'slide0002.html': 'Forecase', 
    ... 
}; 

return params['slide0001.html']; // returns: Looking Ahead 
+0

Byłby to pierwszy przykład, ale nie będzie to oznaczać tablicy wartości klucza. – umlcat

1

Dla mnie jest to najbardziej „naturalny” sposób zorganizować takie dane w formacie JSON, pod warunkiem że wszystkie klucze są łańcuchami.

{ 
    "keyvaluelist": { 
     "slide0001.html": "Looking Ahead", 
     "slide0008.html": "Forecast", 
     "slide0021.html": "Summary" 
    }, 
    "otherdata": { 
     "one": "1", 
     "two": "2", 
     "three": "3" 
    }, 
    "anotherthing": "thing1", 
    "onelastthing": "thing2" 
} 

I przeczytać w

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" 

Pierwszy element i drugi element może być alternatywnie opisany jako obiekty się, oczywiście, każdy z trzech elementów.

0

Dla Klawisz pair/wartość w json użyć obiektu i nie używać tablicę

Znajdź nazwa/wartość w tablicy jest trudne, ale w obiekcie jest łatwe

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);

Powiązane problemy