2016-11-23 163 views
-4

我有一個像這樣的對象。JSON.stringify將對象的屬性名稱轉換爲字符串

var obj = { 
    name: "foo", 
    age: 23 
}; 

for (i in obj) { 
    if (obj[i] == "foo") { 
    obj[i] = "bob"; 
    } 
} 

使用JSON.stringify(obj)當我得到這樣的輸出操縱對象
後。

{"name":"bob","age":23} 

但我不需要對象屬性作爲字符串如何轉換爲對象屬性名稱。所以我需要這樣的輸出{name:"bob",age:23}。如果我錯了,請糾正我。

+5

將屬性設置爲字符串有什麼問題? –

+1

這是json格式bro。 – Anistark

+0

我知道將屬性設置爲字符串沒有問題。但我需要的輸出格式是像我問的問題 – htoniv

回答

2

這看起來像是正確的輸出。

在維基的例子看起來相同WIKI JSON

在JS這不應該是一個問題都沒有。

請看看這個解析您的JSON字符串返回一個對象JSON.parse

也許這將是更聰明的,爲什麼你需要取消導航鍵雙qoutes告訴我們。可能JSON不是問題,我會看看實現。

1

您不需要這樣做,因爲{"name":"bob","age":23}是有效的JSON。但是,如果你真的想刪除關鍵的引號:

var json = JSON.stringify(obj); 
var keyVals = json.substr(1,json.length-2).split(/,/g); 

var output = "{"; 
keyVals.forEach(function(keyVal) { 
    var parts = keyVal.split(":"); 
    output += parts[0].replace(/"/g, ""); 
    output += ":"; 
    output += parts[1]; 
    output += ","; 
}); 

output = output.substr(0, output.length - 1); 

output += "}"; 
1

正如Anirudha說。如果你想刪除鍵的雙引號,你需要正則表達式。作如下:

JSON.stringify(obj).replace(/"([^"]*)":/g, '$1:') 
0

是的,我們可以使用正則表達式來解決這個問題

console.log(JSON.stringify({"name":"bob","age":23}).replace(/\"([^(\")"]+)\":/g,"$1:")) 
+0

很抱歉回答我自己的問題。但沒有使用regExp我需要解決方案 – htoniv

+0

我知道JSON.stringify將鍵值轉換爲字符串。但我不需要這樣的輸出。請理解我的問題。 – htoniv

0

解析與JSON.stringify(OBJ)的對象不只是看你的財產價值,而且你的屬性名稱,以便將對象轉換爲JSON字符串(package.json中的示例語法樣式,其中bouth屬性和值具有父級)。你的對象屬性變成了字符串,因爲對象被字符串化了,所以如果你不想讓屬性成爲字符串,就不要在對象上使用JSON.stringify()。

相關問題