10

JavaでJSON文字列を生成するのに苦労しています。

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

JSONArray ja = new JSONArray();
JSONObject js = new JSONObject();
JSONObject j = new JSONObject();

String s = "[{\"shakil\",\"29\",\"7676\"}]";

js.put("id", "1");
js.put("data", s);
ja.add(js);

j.put("rows", ja);

System.out.println(j.toString());

実際の出力:

{"rows":[{"id":"2","data":"[{\"shakil\",\"29\",\"7676\"}]"}]}

期待される出力:

{"rows":[{"id":"2","data":["shakil", "29","7676"]}]};
4

6 に答える 6

22

あなたsはに入るときに引用符で囲まれてStringないです。の値に対して別のものを作成する必要があります:putJSONObjectJSONArraydata

// using http://jettison.codehaus.org/
JSONObject outerObject = new JSONObject();
JSONArray outerArray = new JSONArray();
JSONObject innerObject = new JSONObject();
JSONArray innerArray = new JSONArray();

innerArray.put("shakil");
innerArray.put("29");
innerArray.put("7676");

innerObject.put("id", "2");
innerObject.put("data", innerArray);

outerArray.put(innerObject);

outerObject.put("rows", outerArray);

System.out.println(outerObject.toString());

結果:

{
    "rows": [
        {
            "id": "2",
            "data": [
                "shakil",
                "29",
                "7676"
            ]
        }
    ]    
}
于 2012-11-12T08:20:23.627 に答える
10

書く

String[] s = new String[] {"shakil", "29" , "7676"};

それ以外の

String s = "[{\"shakil\",\"29\",\"7676\"}]";
于 2012-11-12T09:16:21.050 に答える
1

ついにnet.sf.jsonの答えが見つかりました

JSONArray data1 = new JSONArray();
data1.add("shakil");
data1.add("29");
data1.add("100");

JSONObject inner1 = new JSONObject();
inner1.put("id", "1");
inner1.put("data", data1);

JSONArray list2 = new JSONArray();
list2.add(inner1);

JSONObject finalObj = new JSONObject();
finalObj.put("rows", list2);

System.out.println(finalObj);
于 2012-11-12T10:03:33.757 に答える
1

gsonを確認してください。JSONとの間で Java オブジェクトをシリアル化/逆シリアル化するためのオプションが多数用意されています。

ページからの例

Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};

//(Serialization)
gson.toJson(ints);     ==> prints [1,2,3,4,5]
gson.toJson(strings);  ==> prints ["abc", "def", "ghi"]

//(Deserialization)
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class);
于 2012-11-12T08:09:12.810 に答える
1

Objectmapper などを使用せずに json を String として直接記述すると、多くの問題が発生します。

Jsonを(あなたが定義したように)書くことをお勧めします:

{"rows":[{"id":"2","data":["shakil", "29","7676"]}]}

次に、この小さなオンライン ツールを使用するだけです: http://www.jsonschema2pojo.org/

複数のクラスを持つ単純なJsonをJavaクラスに変換できます。後で Gson または Jackson を使用する場合は、生成中に選択できます。

Gsonは少し軽量で、初心者には良いかもしれません. 計算されたプロパティのようなものを作成できるので、私はJacksonを好みますが、それはすでに詳細です。

https://code.google.com/p/google-gson/

Gson を追加したら、次のことを行う必要があります。

Gson gson = new Gson();
MyGeneratedClass target = new MyGeneratedClass();
String json = gson.toJson(target);

出来上がり: 後で変更する方法を考えずに、単純な json を生成しました!

于 2015-04-05T23:48:03.157 に答える
1

Java で JSON 文字列を宣言できないことは、非常に苦痛です。主な理由は、(a) 複数行の文字列がない (b) 二重引用符をエスケープすると、読みにくくなります。

これを回避するには、一重引用符を使用して JSON 文字列を宣言します (標準の複数行連結を使用します)。派手なものはありません:

String jsonStr = 
    "{" +
        "'address': " + 
        "{" +
            "'name': '" + name + "'," +
            "'city': '" + city + "'," +
            "'street1': '"+ street1 +"'," +
            "'street2': '"+ street2 +"'," +
            "'zip': '" + zip + "', " +
            "'state':'" + state + "'," +
            "'country': '" + country + "'," +
            "'phone': '" + phone + "'" +
        "}" +
    "}";
jsonStr = MyUtil.requote(jsonStr);
System.out.println(jsonStr);

MyUtil

public static String requote(String jsonString) {
    return jsonString.replace('\'', '"');
}

Map を宣言するよりも面倒だと思う人もいるかもしれませんが、文字列構文だけで JSON を作成する必要がある場合、これはうまくいきます。

于 2015-04-05T22:21:23.177 に答える