1

私は次のようなコードを持っています:

import net.sf.json.*;--just so you know what the library is
...
JSONArray a = new JSONArray();
JSONObject p = new JSONObject();
p.put("some_attribute1","some normal string");
p.put("some_attribute2","[3something]");
p.put("some_attribute3","[something3]");
a.add(p);
System.out.println(a.toString());

これにより、次のものが生成されます。

[
    {
        "some_attribute1":"some normal string",
        "some_attribute2":["3something"],
        "some_attribute3":"[something3]"
    }
]

望ましい結果の代わりに:

[
    {
        "some_attribute1":"some normal string",
        "some_attribute2":"[3something]",
        "some_attribute3":"[something3]"
    }
]

「some_attribute2」が実際の出力の配列であるのと、目的の出力の文字列であるのとの違いに注意してください。誰かがこれがなぜであるか説明できますか?また、私の質問をより適切に分類するための用語がある場合はどうなりますか?

4

2 に答える 2

0

これは実際にはすでに報告されているバグです。リンクは次のとおりです

...このライブラリはもうサポートされていないようです。この問題は2011年半ばから存在しています...

json-lib ライブラリが公式にサポートされなくなったことに気が進まなかったので、gson に切り替えることにしました。この問題は、コード内の場所が多すぎて適切な修正または回避策がないために発生する可能性があります。

于 2013-01-21T18:24:56.540 に答える
-1

奇妙な動作のように見えますがput、値を JSONObject に変換しようとすると、ドキュメントを正しく解釈すると、いくつかの文字列を引用する必要があるようです:

文字列が引用符または一重引用符で始まらない場合、先頭または末尾にスペースが含まれていない場合、およびこれらの文字が含まれていない場合は、文字列を引用符で囲む必要はまったくありません{ } [ ] / \ : , = ; #。数字であり、それらが予約語truefalse、または でない場合null

これは、文字列が必要な場合に使用する必要があることを意味します。

p.put("some_attribute2","'[3something]'");
于 2013-01-21T17:56:57.080 に答える