2017-05-10 3 views
-2

こんにちは、私はjsonファイルを使用するのが初めてで、完全に失われています。私は、複数の配列を含むjsonobjectを持っており、すべての配列からkeyviewの値を取得してリストビューを作成する必要があります。私は名前で単一の配列の値を取得する方法を知っていますが、名前を使用せずに複数の配列から値を取得する場合の手がかりはありません。どのような助けも大いにありがたく思っています。私は数多くの例を超えており、誰も私がしようとしているものに合っていないようです。複数の配列を含むjsonオブジェクトからすべての要素の値を取得するにはどうすればよいですか?

私のJSONコード

{ 
"1":[{"gameid":"1","title":"This Game","more stuff":"stuff 1"}] 
,"2":[{"gameid":"2","title":"That Game","more stuff":"stuff 2"}] 
,"3":[{"gameid":"3","title":"Another game","more stuff":"stuff 3"}] 
} 

は、私は、次のアレイに移動する値を取得し、各配列をループする必要があると思います。オブジェクトに何個の配列があるのか​​わからないので、配列名を知らずにこれを行う必要があります。 ありがとう

+0

あなたはGsonのようなjsonライブラリを試しましたか? https://github.com/google/gson – Scott

答えて

0

名前を知らずにjsonのすべてのオブジェクトノードをループすることができます。使用ジャクソン、以下の実施例:

public class Resolver { 

    public static List<String> getTitles(final String jsonString) 
     throws IOException { 
     List<String> result = new ArrayList<>(); 

     ObjectMapper mapper = new ObjectMapper(); 
     JsonNode json = mapper.readTree(jsonString); 

     Iterator<Map.Entry<String, JsonNode>> fields = json.fields(); 

     while(fields.hasNext()){ 
      Map.Entry<String, JsonNode> entry = fields.next(); 
      System.out.println("|" + entry.getKey() + "| = entry.getKey()"); 
      System.out.println("|" + entry.getValue() + "| = entry.getValue()"); 
      result.add(entry.getValue().findPath("title").asText()); 
      System.out.println("****************************"); 
     } 

     return result; 
    } 
} 

Testクラス:

public class ResolverTest { 

    @Test 
    public void testGetTitles() throws Exception { 
     final String jsonString = "{" 
     + "\"1\":[{\"gameid\":\"1\",\"title\":\"This Game\",\"more stuff\":\"stuff 1\"}]" 
     + ",\"2\":[{\"gameid\":\"2\",\"title\":\"That Game\",\"more stuff\":\"stuff 2\"}]" 
     + ",\"3\":[{\"gameid\":\"3\",\"title\":\"Another game\",\"more stuff\":\"stuff 3\"}]" 
     + "}"; 


     List<String> ids = Resolver.getTitles(jsonString); 
     System.out.println("|" + ids + "| = ids"); 

     Assert.assertEquals(3, ids.size()); 
    } 
} 

出力:

| 1 | = entry.getKey() [{"gameid": "1"、 "title": "このゲーム"、 "more stuff": "stuff 1"}] | = entry.getValue()


2 | = entry.getKey() [{"gameid": "2"、 "title": "そのゲーム"、 "more stuff": "stuff 2"}] | = entry.getValue()


| 3 | = entry.getKey() [{"gameid": "3"、 "title": "もう一つのゲーム"、 "more stuff": "stuff 3"}] | = entry.getValue()


[このゲーム、そのゲーム、別のゲーム] | = ids

+0

私は何か別のことをやってしまい、サーバー上でPHPの問題を解決しましたが、サンプルコードを教えてくれて以来、これを最善の答えとしています。 GSONまたはジャクソンを使用すると、jsonファイルで作業するときのように見え、今後のプロジェクトで使用する予定です。返信にもう一度感謝します。 – Freecat

関連する問題