2011-06-18 16 views
9

मैं कुंजी मान आइटम की एक सरणी, कुछ इस तरह हो सकता है ऐसा करने के लिए एक आम तरीका संग्रहीत करना चाहते हैं:एक कॉम्पैक्ट 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" } 
} 

लेकिन, जब कई जोड़े है वहाँ/आइटम, स्ट्रिंग की लंबाई निषिद्ध हो जाता है, और मैं एक कॉम्पैक्ट रास्ता चाहते हैं, यह एक उदाहरण हो सकता है:

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

साथ ही, मैं, एक keyvalue सरणी के रूप में डेटा की पहचान के लिए क्योंकि एक तरह से चाहता हूँ, मुझे चाहते हो सकता है एक ही 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: अमान्य कोड निकालें। जावास्क्रिप्ट => JSON

अद्यतन 2: जोड़े गैर कुंजी मान डेटा

अद्यतन 3: बदलें "[" और "]" "{" और "}" के लिए प्रत्येक कुंजी मान युग्म में

+0

आपके कोड में JSON की एक भी पंक्ति नहीं है। केवल जावास्क्रिप्ट वस्तुओं। –

+0

@ फ़ेलिक्स क्लिंग। धन्यवाद। मैं जेएसओएन – umlcat

+0

के बजाय जेएस की तरह इसे बनाने वाले अमान्य कोड को हटा देता हूं, यह अभी भी JSON नहीं है। JSON में, प्रत्येक कुंजी (और स्ट्रिंग) को डबल कोट्स में होना चाहिए और 'param =' जैसी कुछ मौजूद नहीं है। –

उत्तर

8

तर्क को पार्स इस जानता कि {"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"] 
    ] 
} 

... जिसे बाद में पार्सर द्वारा संभाला जाएगा।

+0

इसका मामला "डेटा की संरचना के बारे में समय से पहले नहीं जानता है"। धन्यवाद – umlcat

11

तो क्यों क्या आप बस एक महत्वपूर्ण मूल्य का उपयोग नहीं करते हैं?

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

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

यह पहला उदाहरण होगा, लेकिन, यह पहचान नहीं करेगा कि यह एक महत्वपूर्ण मान सरणी है। – umlcat

1

मेरे लिए, यह सबसे "प्राकृतिक" जिस तरह से प्रदान की 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" 

पहला तत्व या दूसरा तत्व के रूप में इस पढ़ें।

0

उपयोग कुंजी के लिए/मान युग्म 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);

संबंधित मुद्दे