2012-11-15 17 views
32

मैं निम्नलिखित सामग्री के साथ एक JSON वस्तु है:नाम बदलने के लिए कैसे JSON कुंजी

[ 
    { 
    "_id":"5078c3a803ff4197dc81fbfb", 
    "email":"[email protected]", 
    "image":"some_image_url", 
    "name":"Name 1" 
    }, 
    { 
    "_id":"5078c3a803ff4197dc81fbfc", 
    "email":"[email protected]", 
    "image":"some_image_url", 
    "name":"Name 2" 
    } 
] 

मैं "_ id" कुंजी बदलना चाहते हैं "आईडी" तो यह बन जाएगा

[ 
    { 
    "id":"5078c3a803ff4197dc81fbfb", 
    "email":"[email protected]", 
    "image":"some_image_url", 
    "name":"Name 1" 
    }, 
    { 
    "id":"5078c3a803ff4197dc81fbfc", 
    "email":"[email protected]", 
    "image":"some_image_url", 
    "name":"Name 2" 
    } 
] 

कैसे क्या मैं या तो जावास्क्रिप्ट, jQuery या रूबी, रेल के साथ ऐसा करूंगा?

धन्यवाद।

+3

जेएसओएन पार्स, परिणामी डेटा संरचना को तदनुसार संशोधित करें और इसे वापस जेएसओएन में परिवर्तित करें। पॉइंटर्स: http://stackoverflow.com/questions/4935632/how-to-parse-json-in-javascript, http://stackoverflow.com/questions/1826727/how-do-i-parse-json-with- रूबी-ऑन-रेल, http://stackoverflow.com/questions/2295496/convert-javascript-array-to-json, http://stackoverflow.com/questions/3183786/how-to-convert-a-ruby- हैश वस्तु-टू-json। –

उत्तर

62
var json = '[{"_id":"5078c3a803ff4197dc81fbfb","email":"[email protected]","image":"some_image_url","name":"Name 1"},{"_id":"5078c3a803ff4197dc81fbfc","email":"[email protected]","image":"some_image_url","name":"Name 2"}]'; 

var obj = JSON.parse(json)[0]; 
obj.id = obj._id; 
delete obj._id; 

json = JSON.stringify([obj]); 

यह करने के लिए json परिवर्तन:

[{"email":"[email protected]","image":"some_image_url","name":"Name 1","id":"5078c3a803ff4197dc81fbfb"}] 

के बाद से आदेश JSON में एक नाम/मान युग्म में अर्थ नहीं है, यह अपने वांछित परिणाम के रूप में एक ही है।

+3

क्या होगा यदि मैं जेसन में सभी _id में परिवर्तन लागू करना चाहता हूं? – truongnm

+1

@truongnm loop –

+0

यदि आप रिक्त स्थान के साथ चाबियाँ रखना चाहते हैं तो आप इसे इस ओबीजे ["मेरी आईडी"] = obj.id – catchiecop

21

इस मामले में स्ट्रिंग प्रतिस्थापन का उपयोग करना सबसे आसान होगा। जेएसओएन को सीरियलाइज करना अच्छा काम नहीं करेगा क्योंकि _id ऑब्जेक्ट का प्रॉपर्टी नेम बन जाएगा और संपत्ति का नाम बदलना कोई आसान काम नहीं है (कम से कम अधिकांश लैंगुग में नहीं, यह जावास्क्रिप्ट में इतना बुरा नहीं है)। इसके बजाए बस करो;

 jsonString = jsonString.replace("\"_id\":", "\"id\":"); 
10

evanmcdonnal से उल्लेख किया है, सबसे आसान समाधान JSON के बजाय स्ट्रिंग के रूप में इस पर कार्रवाई करने के,

var json = [{"_id":"5078c3a803ff4197dc81fbfb","email":"[email protected]","image":"some_image_url","name":"Name 1"},{"_id":"5078c3a803ff4197dc81fbfc","email":"[email protected]","image":"some_image_url","name":"Name 2"}]; 
 
    
 
json = JSON.parse(JSON.stringify(json).split('"_id":').join('"id":')); 
 

 
document.write(JSON.stringify(json));

इस स्ट्रिंग के लिए दिया JSON डेटा बदलने और "_ id" से "का स्थान ले लेगा है आईडी "फिर इसे आवश्यक JSON प्रारूप में परिवर्तित कर रहा है। लेकिन replace के बजाय मैंने split और join का उपयोग किया, क्योंकि replace केवल स्ट्रिंग की पहली घटना को प्रतिस्थापित करेगा।

+1

धन्यवाद जोड़ सकते हैं धन्यवाद श्रीमान स्ट्रेंजर, यह वास्तव में मेरी मदद करता है। –

1

यदि आप का नाम बदलना चाहते हैं तो कुछ घटनाओं के सभी घटनाएं आप जी विकल्प के साथ रेगेक्स का उपयोग कर सकते हैं। उदाहरण के लिए:

var json = [{"_id":"1","email":"[email protected]","image":"some_image_url","name":"Name 1"},{"_id":"2","email":"[email protected]","image":"some_image_url","name":"Name 2"}]; 

str = JSON.stringify(json); 

अब हमारे पास स्ट्रिंग प्रारूप में जेसन है।

बदलें "_ id" की सभी घटनाओं "आईडी" जी विकल्प के साथ regex का उपयोग कर रहे हैं:

str = str.replace(/\"_id\":/g, "\"id\":"); 

और json प्रारूप पर लौटने:

json = JSON.parse(str); 

अब हम साथ हमारे json है वांछित कुंजी नाम।

+0

यह तब काम नहीं करेगा जब आपके पास प्रतिस्थापित कुंजी नाम वाला कोई मूल्य हो, क्योंकि यह उस स्थान को भी बदल देगा। – Carasel

+0

अच्छा बिंदु लेकिन किनारे का मामला। पाठ को बदलने पर हमेशा सावधान रहना होगा – rafraph

0

आप यह गतिशील करना चाहते हैं, उदाहरण के लिए, आप एक सरणी जो आप JSON ऑब्जेक्ट के लिए एक कुंजी के रूप में लागू करने के लिए करना चाहते हैं:

अपने सरणी हो जाएगा की तरह:

var keys = ["id", "name","Address","Phone"] // The array size should be same as JSON Object keys size 

अब आप की तरह एक JSON सरणी है:

var jArray = [ 
    { 
    "_id": 1, 
    "_name": "Asna", 
    "Address": "NY", 
    "Phone": 123 
    }, 
    { 
    "_id": 2, 
    "_name": "Euphoria", 
    "Address": "Monaco", 
    "Phone": 124 
    }, 
    { 
    "_id": 3, 
    "_name": "Ahmed", 
    "Address": "Mumbai", 
    "Phone": 125 
    } 
] 

$.each(jArray ,function(pos,obj){ 
    var counter = 0; 
    $.each(obj,function(key,value){ 
     jArray [pos][keys[counter]] = value; 
     delete jArray [pos][key]; 
     counter++; 
    }) 
}) 

आपका परिणामी JSON सारणी किया जाएगा:

[ 
    { 
    "id": 1, 
    "name": "Asna", 
    "Address": "NY", 
    "Phone": 123 
    }, 
    { 
    "id": 2, 
    "name": "Euphoria", 
    "Address": "Monaco", 
    "Phone": 124 
    }, 
    { 
    "id": 3, 
    "name": "Ahmed", 
    "Address": "Mumbai", 
    "Phone": 125 
    } 
] 
संबंधित मुद्दे