0

私はこのようなjson出力コードを持っています:

{"a":{"p1":"1"},"a":{"p2":"2"},"b":{"b1":"b2"}}

javascriptまたはjqueryまたはphpを使用して以下に変換する方法は?

{"a":{"p1":"1","p2":"2"},"b":{"b1":"b2"}}

編集:私はこのコードでjsonコードを生成します:

parts2.push('"'+$(this).attr('alt')+'":{"'+$(this).attr('title') + '"' + ":" + '"'+$(this).attr('value') + '"}' );

ただし、$(this).attr('alt')はループ内で繰り返される可能性があり、キーの重複を防ぎ、代わりにそのキーに値を追加したい

4

3 に答える 3

4

オブジェクトの各プロパティには、一意のキー名が付いているはずです。重複するキー名を使用してJSONを解析しようとすると、最後に発生した値のみが使用されるため、ネイティブJSON.parseでこれを解析しても、データが保持されることを期待することはできません。

編集に従って、重複が発生しないようにすることができます。

var obj = {};

if typeof obj[$(this).attr('alt')] == "undefined"
    obj[$(this).attr('alt')] = {};

obj[$(this).attr('alt')][$(this).attr('title')] = $(this).attr('value');
parts2.push(JSON.stringify(obj));
于 2012-11-26T11:05:21.407 に答える
2

JSON文字列を生成する前に値をマージするか、JSONを解析するためにJSONパーサーを自分で実装する必要があります。

http://www.ietf.org/rfc/rfc4627.txt?number=4627:_

オブジェクト内の名前は一意である必要があります

于 2012-11-26T11:14:41.120 に答える
1

疑似JSONを文字列化する代わりに、オブジェクトを作成して入力し、送信時にオブジェクトを文字列化するだけです。

var parts = {};
$('.foo')each(function()
{//the loop, here parts is being filled
    parts.[$(this).attr('alt')] = parts.[$(this).attr('alt')] || {};//initialize to object if property doesn't exist
    parts.[$(this).attr('alt')] = [$(this).attr('title')] = $(this).attr('value');
});
//make JSON:
partsJSON = JSON.stringify(parts);
//{a:{p1:foo,p2:bar},b:{p3:foobar}} or something
于 2012-11-26T11:15:13.753 に答える