2016-11-23 21 views
-4

私はこのようなオブジェクトを持っています。私はこのような出力を得るJSON.stringify(obj)を使用するときにオブジェクト
を操作した後JSON.stringifyはオブジェクトのプロパティ名を文字列に変換します

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

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

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

しかし、私はどのようにオブジェクトのプロパティ名に変換するオブジェクトプロパティを必要としません。だから私は{name:"bob",age:23}のような出力が必要です。私が間違っているなら、私を修正してください。

+5

文字列としてプロパティを持つのはどうですか? –

+1

これはjson形式の仲間です。 – Anistark

+0

私は文字列としてプロパティを持つことに問題はないことを知っています。しかし、私は質問のようになるように出力形式が必要です – htoniv

答えて

2

これは正しい出力のようです。

ウィキでの例では、全く問題になるはずのJSで同じWIKI JSON

を探します。

PLSがバックオブジェクトJSON.parse

多分あなたが鍵からダブルクォートを削除する必要がある理由をお聞かせするよりスマートになるまで、あなたのJSON文字列を解析するためにこれを見て。おそらく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

Asirudhaは言った。キーの二重引用符を削除する場合は、正規表現が必要です。 fllows通り:

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文字列に変換するための名前(例えば、bourプロパティと値にparenthasesがあるpackage.jsonのシンタックススタイルの外観)。オブジェクトが文字列化されているため、オブジェクトプロパティは文字列になります。したがって、プロパティを文字列にしたくない場合は、オブジェクトに対してJSON.stringify()を使用しないでください。

関連する問題