3

jsonの解析に問題があります。次の形式のjsonがあります。

{"blah":"blah","blah":"blah"}
{"blah":"blah","blah":"blah"}
{"blah":"blah","blah":"blah"}

JSON へのリンクは次のとおりです: http://gerrit.aokp.co/query?format=JSON&q=status:merged&age:1d

これをjsonobjectにして反復することはできません。私は現在それを文字列として持っています。

これを繰り返す方法はありますか?500以上になります。

角かっこを追加して配列にしようとしましたが、カンマで区切る必要があったためうまくいきませんでした。Webから取得しているため、これを手で操作することはできません。だから私はこれを試しました。

jsonString = jsonString.replaceAll("}(?!,)", "},");

負のコンマを追加する理由は、これらのオブジェクトの内部に jsonobject がある場合があるため、コンマなしで「}」の前にのみコンマを追加したいからです。

replaceall を実行すると、このエラーが発生します。

Error in fetching or parsing JSON: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1:
    }(?!,)
    ^

私は何を間違っているのですか、それとも見ているより簡単な方法はありますか?

編集:そうそう、これは Android アプリにあるため、これを Java で実装する必要があります。

4

3 に答える 3

2

Jackson の ObjectMapper を使用して目的を達成する方法の例を次に示します。

ObjectMapper om = new ObjectMapper();
try {
    List<Object> obj = om.readValue(yourJsonString, new TypeReference<List<Object>> () { });
} catch (IOException e1) {
    e1.printStackTrace();
}

これで、JSON 文字列内の個々のオブジェクトのリストが表示されます。さらに一歩進めるために、解析しているオブジェクトの POJO を作成できます。

何かのようなもの:

public class MyObject{
    private String project;
    private String branch;
}

これは単なる例です。json プロパティごとにプロパティを定義する必要があります。

次に、次のようにします。

List<Object> obj = om.readValue(yourJsonString, new TypeReference<List<Object>> () { });

の中へ

List<MyObject> obj = om.readValue(yourJsonString, new TypeReference<List<MyObject>> () { });

お役に立てれば!

于 2013-08-12T03:06:34.187 に答える
1

投稿したリンクから、オブジェクト間に (そしてオブジェクト間にのみ) 改行があるように見えます。それが正しければ、私は次のようにアプローチします。

String[] items = dataFromWeb.split("\n");
String asJSONArrayString = Arrays.toString(items);
JSONArray jsonArray = new JSONArray(asJSONArrayString);

これにより、データが改行で分割され、要素間のカンマと全体の括弧で結合されます。

于 2013-08-12T02:31:53.117 に答える
0

JSONObject jObject = null;

mJsonString = downloadFileFromInternet(urlString); jObject = 新しい JSONObject(mJsonString);

これにより、json オブジェクトが取得されます。

これは、json オブジェクトから json 配列を取得する方法です。

JSONArray jsonImageArray = jObject.getJSONArray("あなたの文字列");

于 2013-08-12T02:19:28.647 に答える