2011-06-18 19 views
9

: Birçok çift olduğundaBen anahtar değeri öğeleri bir dizi, böyle bir şey olabilir yapmak için ortak bir yol saklamak istediğiniz

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

Ama/öğeleri, dizi uzunluğu men olursa, ve ben bir kompakt yol istiyorsanız, bu bir örnek olabilir: Ayrıca

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

, ben bir keyvalue dizi olarak verileri çünkü tanımlamak için bir yol istiyorum, isteyebilirsiniz diğer verileri aynı JSON dosyasında saklamak için Eğer başka bir yol var mı, sen öneriyorsun sen şeyi, hangi birini ne

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

: Ben bu örnekleri var mı? Teşekkürler.

UPDATE 1: Geçersiz kodu kaldırın. JavaScript => JSON

GÜNCELLEME 2: Ekle olmayan anahtar değeri verileri

GÜNCELLEME 3: Her anahtar değeri çiftinde "{" ve "}" için Değiştir "[" ve ​​"]"

+0

Kodunuzda tek bir JSON satırı yok. Sadece JavaScript nesneleri. –

+0

@Felix Kling. Teşekkürler. JSon – umlcat

+0

yerine JS gibi geçersiz kodları kaldırıyorum, hala JSON değil. JSON'da, her anahtarın (ve dizenin) çift tırnak içinde olması ve 'param =' gibi bir şey olmaması gerekir. –

cevap

8

bu {"key": "slide0001.html", "value": "Looking Ahead"} anahtar/değer çifti olduğunu bilir ayrıştırma mantık, o zaman bir dizide değiştirin yada birkaç sabitler belirterek tutabilseydim hangi tuşa endeks haritalar. Örneğin

:

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

var C_KEY = 0; 
var C_VALUE = 1; 

var value = data[C_VALUE]; 

Yani, şimdi, veri olabilir: sizin ayrıştırma mantık veri yapısı hakkında önceden bilmiyorsa

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

yapabilirsiniz Bunu açıklamak için bazı meta veriler ekleyin. Örneğin, ayrıştırıcı tarafından ele alınacak olan

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

.adı bulun bir nesne kullanımı ve dizi

kullanmayan json kullanım anahtarı için

+0

"Verinin yapısı hakkında vaktini önceden bilmeyen" durumu. Teşekkürler – umlcat

11

Peki neden Sadece anahtar-değer bir edebi kullanmıyor musunuz? Bana göre

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

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

İlk örnekte olabilir, ancak bir anahtar değer dizisi olduğunu belirleyemez. – umlcat

1

, bu anahtarların tüm dizeleri şartıyla JSON tür verileri, yapısı için en "doğal" yoldur.

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

tabii ki, kendilerini nesneler olarak, alternatif olarak, üç elemanlarının her biri, tarif edilebilir

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" 

birinci eleman ve ikinci eleman olarak okuyun.

0

/değer çifti/dizi değer zordur ama nesne

Ör kolaydır:

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

İlgili konular