web-dev-qa-db-ja.com

AndroidでJSON配列(Jsonオブジェクトではない)を解析する方法

JSONArrayを解析する方法を見つけるのに問題があります。それはこのように見えます:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]

JSONの書き方が異なる場合(つまり、オブジェクトの配列ではなくjsonオブジェクトが返された場合)、その解析方法を知っています。しかし、それは私が持っているすべてであり、それと共に行かなければなりません。

*編集:それは有効なJSONです。私はこのjsonを使ってiPhoneアプリを作りました、今私はAndroidのためにそれをする必要があり、それを理解することができません。たくさんの例がありますが、それらはすべてJSONObjectに関連しています。 JSONArrayには何かが必要です。

誰かが私にいくつかのヒント、またはチュートリアルや例を教えてください。

とても有難い !

77
SteBra

次のスニペットを使用してJsonArrayを解析してください。

JSONArray jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}

それが役に立てば幸い。

125
Spring Breaker

ちょっとだけ紹介します Jackson 例:

まずJSON文字列のフィールドを持つデータホルダーを作成します

// imports
// ...
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDataHolder {
    @JsonProperty("name")
    public String mName;

    @JsonProperty("url")
    public String mUrl;
}

そしてMyDataHoldersのリストをパースする

String jsonString = // your json
ObjectMapper mapper = new ObjectMapper();
List<MyDataHolder> list = mapper.readValue(jsonString, 
    new TypeReference<ArrayList<MyDataHolder>>() {});

リストアイテムを使う

String firstName = list.get(0).mName;
String secondName = list.get(1).mName;
25
vilpe89
public static void main(String[] args) throws JSONException {
    String str = "[{\"name\":\"name1\",\"url\":\"url1\"},{\"name\":\"name2\",\"url\":\"url2\"}]";

    JSONArray jsonarray = new JSONArray(str);


    for(int i=0; i<jsonarray.length(); i++){
        JSONObject obj = jsonarray.getJSONObject(i);

        String name = obj.getString("name");
        String url = obj.getString("url");

        System.out.println(name);
        System.out.println(url);
    }   
}   

出力:

name1
url1
name2
url2
19
Maxim Shoustin

オブジェクトを保持するためのクラスを作成します。

public class Person{
   private String name;
   private String url;
   //Get & Set methods for each field
}

次に、次のようにして逆シリアル化します。

Gson gson = new Gson();
Person[] person = gson.fromJson(input, Person[].class); //input is your String

参考記事:http://blog.patrickbaumann.com/2011/11/gson-array-deserialization/

11
Kevin Bowersox

この例では、1つのJSON配列内に複数のオブジェクトがあります。あれは、

これはjsonの配列です。[{"name": "name1"、 "url": "url1"}、{"name": "name2"、 "url": "url2"}、...]

これは1つのオブジェクトです:{"name": "name1"、 "url": "url1"}

JSonResultStringという文字列変数に結果が返されたと仮定します。

JSONArray arr = new JSONArray(jSonResultString);

  //loop through each object
  for (int i=0; i<arr.length(); i++){

  JSONObject jsonProductObject = arr.getJSONObject(i);
  String name = jsonProductObject.getString("name");
  String url = jsonProductObject.getString("url");


}
5
TharakaNirmana

@Stebraこの例を参照してください。これはあなたを助けるかもしれません。

public class CustomerInfo 
{   
    @SerializedName("customerid")
    public String customerid;
    @SerializedName("picture")
    public String picture;

    @SerializedName("location")
    public String location;

    public CustomerInfo()
    {}
}

そしてあなたが結果を得た時。このように解析する

List<CustomerInfo> customers = null;
customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());
3
nilkash

いくつかの素晴らしい提案がすでに述べられています。 GSONを使用することは本当に便利です、そして人生をさらに楽にするためにあなたはこれを試すことができます ウェブサイト それはjsonschema2pojoと呼ばれ、まさにそれをします:

あなたはそれをあなたのJSONに渡し、それはあなたのプロジェクトに貼り付けることができるJavaオブジェクトを生成します。 GSONを選択して変数に注釈を付けることができるので、jsonからオブジェクトを抽出するのはさらに簡単になります。

2
TomCB

私の場合サーバーからロードする例..

int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages"));
            if (jsonLength != 1) {
                for (int i = 0; i < jsonLength; i++) {
                    JSONArray jsonArray = new JSONArray(jsonObject.getString("messages"));
                    JSONObject resJson = (JSONObject) jsonArray.get(i);
                    //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at"));
                }

それが助けを願っています

1
bong jae choe