2017-11-12 21 views
1

私は簡単な質問をしてくれました。ここに誰かがJsonの文字列を解析してすべてのユーザーを抽出してリストに入れる方法を教えてくれるのだろうかと疑問に思っていましたか?json stringからオブジェクトの配列を抽出し、ArrayListに入れますか?

ユーザーの直下にあるオブジェクトキーは、応答ごとに変更できる乱数です!

{ 
    "_links": {}, 
    "count": {}, 
    "users": { 
     "123321": { //*Is a random number which can be any number 
      "_links": {}, 
      "user": { 
       "id": "123321", 
       "name": "...", 
       "age": "...", 
       "address": "" 
       .. 
      } 
     }, 
     "456654": { 
      "_links": {}, 
      "user": { 
       "id": "456654", 
       "name": "...", 
       "age": "...", 
       "address": "" 
       ... 
      } 
     } 
     ... 
    }, 
    "page": {} 
} 

理想的には、Jackson JsonまたはGsonを利用することは理想的です。

また、2つのフィールド(id &の名前)を持つUserオブジェクトを作成し、残りのフィールドは無視したいと考えています。あなたが好き行うことができますJSON ...を解析する必要が

+0

が、少なくとも何(JSONの構造をマッピングするクラスを作成します。興味を持っている)、ジャクソンを使ってそのクラスのインスタンスを読む。 'users'メンバーにMap を使用してください。 –

+0

興味のないフィールドを無視するにはどうすればいいですか?あなたはこのクラスの例と例を提供することができますし、ジャクソンを使用してツリーを反復し、このArrayListを作成してください! –

+0

クラスに入れない。あなたは自分で実験を始める必要があります。マップから値を抽出することは、Mapのjavadocを読むことの問題です。 –

答えて

2

Aジャクソン-アプローチは、次のようになります。

ObjectMapper om = new ObjectMapper(); 
JsonNode node = om.readTree(input); 

List<JsonNode> users = node.findValues("user"); 

ここからJsonNodeインスタンスから値を直接取得することができます。例:

for (JsonNode jsonNode : users) { 
    System.out.println(jsonNode.get("name")); 
    System.out.println(jsonNode.get("id")); 
} 

またはPOJOに変換:

次のようになりますPOJOの存在と仮定
for (JsonNode user : users) { 
    User pojo = om.treeToValue(user, User.class); 
    System.out.println(pojo.id); 
    System.out.println(pojo.name); 
} 

@JsonIgnoreProperties(ignoreUnknown = true) 
public class User { 
    public String name, id; 
} 
1

-

JSONObject json=new JSONObject(response); 
JSONObject json2=json.getJSONObject("users"); 
Iterator keys = json2.keys(); 

while(keys.hasNext()) { 
    String key = (String)keys.next(); 
    JSONObject json3=json2.getJSONObject(key); 
    ArrayList<User> list=new ArrayList<>(); 

    JSONObject userjson=json3.getJSONObject("user");  
    User user = new User(); 
    String id=userjson.getString("id"); 
    String name=userjson.getString("name"); 
    user.setId(id); 
    user.setName(name); 
    list.add(user);  
} 

はそれが役に立てば幸い.. :)

+0

いいえ、解決策は乱数を考慮していません。 これは私が知っている限りjsonの解析を実行する最も標準的な方法です.100人のユーザーにとっては時間がかかりません。これを多くの標準で実装しました5000ユーザーを持つアプリ。 – Ankit

+0

今すぐコードを確認してください。私も無視して乱数を解析しました。リストにはユーザーオブジェクト、つまりユーザーのリストだけが含まれています。また、リストを各ユーザーオブジェクトに保存する必要があるため、これを行うにはもっと効果的な方法があります。ループでのみ..それは時間がかかりません..ストリームクラスを使用して同じことを行い、複雑さは同じになります。 – Ankit

+0

https://mvnrepository.com/artifact/org.json/json 動作している場合は、このマークを付けてください。:) – Ankit

関連する問題