2016-04-26 1 views
0

最終的な目的は、作成された名前と下のJsonから抽出された値(param1とparam2)。例えば:{(SW:5000 W)、(RW:5800 W)}ここGson APIを使用して複雑なネストされたjson構造の特定のキーと値のペアを抽出する方法

string = 

[ 
    { 
     "title":"Specifications", 
     "sort":1, 
     "specValues":[ 
      { 
      "name":"xxx", 
      "type":"yyy", 
      "englishValue":"xx.0 lb", 
      "metricValue":"yy.0 kg", 
      "sort":4 
      }, 
      { 
      "name":"Param1", 
      "type":"measurement", 
      "englishValue":"5000.0 W", 
      "metricValue":"5000.0 W", 
      "sort":99 
      }, 
      { 
      "name":"Param2", 
      "type":"measurement", 
      "englishValue":"5800.0 W", 
      "metricValue":"5800.0 W", 
      "sort":99 
      }, 
      { 
      "name":"Frequency", 
      "type":"measurement", 
      "englishValue":"60.0 Hz", 
      "metricValue":"60.0 Hz", 
      "sort":99 
      } 
     ] 
    } 
] 

は、それ以下の誤差を抽出するために自分のコードである:

public Map<String, String> parseGenGson(String jsonLine) { 
    Map <String,String> generatorMap = new LinkedHashMap <String,String>(); 
    try { 
     JsonElement jelement = new JsonParser().parse(jsonLine); 

     JsonArray jarray1 = jelement.getAsJsonArray(); 
     JsonArray jarray = (JsonArray) jarray1.get(2); 
     JsonObject jobject1 = jarray.getAsJsonObject(); 
     JsonArray jarray2 = jobject1.getAsJsonArray("specValue"); 
     JsonObject jobject = jarray2.get(1).getAsJsonObject(); 
     String result1 = jobject.get("englishValue").toString(); 
     generatorMap.put("Running Watts",result1); 
     jobject = jarray.get(2).getAsJsonObject(); 
     String result2 = jobject.get("englishValue").toString(); 
     generatorMap.put("Starting Watts",result2);   
     log.info("Map of generators" + generatorMap); 
     return generatorMap; 
    } catch (Exception e){ 
     log.error(e.getMessage()); 
     return generatorMap; 
    } 
    } 

エラー:

Index: 2, Size: 1 

私が使用している構造で何かがオフになっています。GSon APIを使用しました。何か案は?

答えて

1

最初の行は、エラーを投げているものです。

JsonArray jarray = (JsonArray) jarray1.get(2); 

jarray1はただ一つの要素(ルートオブジェクト、プロパティtitlesortと1、specValues)が含まれていますので、取得エラーが理にかなっています。

はこのような何か試してみてください:

Map<String, String> generatorMap = new LinkedHashMap<String, String>(); 
try { 
    JsonElement jelement = new JsonParser().parse(jsonLine); 

    JsonArray jarray1 = jelement.getAsJsonArray(); 
    JsonObject rootObject = (JsonObject) jarray1.get(0); 
    JsonArray specValues = rootObject.getAsJsonArray("specValues"); 

    JsonObject first = (JsonObject) specValues.get(0); 
    JsonObject second = (JsonObject) specValues.get(1); 

    String result1 = first.get("englishValue").toString(); 
    generatorMap.put("Running Watts", result1); 
    String result2 = second.get("englishValue").toString(); 
    generatorMap.put("Starting Watts", result2); 
    return generatorMap; 
} catch (Exception e) { 
    log.error(e.getMessage()); 
    return generatorMap; 
} 
0
JsonArray jarray1 = jelement.getAsJsonArray(); 
    JsonArray jarray = (JsonArray) jarray1.get(0); 
    JsonObject jobject1 = jarray.getAsJsonObject(); 
    JsonArray jarray2 = jobject1.getAsJsonArray("specValue"); 
    JsonObject jobject = jarray2.get(0).getAsJsonObject(); 
    String result1 = jobject.get("englishValue").toString(); 
    generatorMap.put("Running Watts",result1); 
    jobject = jarray.get(1).getAsJsonObject(); 

JsonArrayget方法はjava.util.Listから継承されたドキュメントの読み込みはとても最初の要素はインデックス0はこれを試してみて、私に知らせています!

+0

大漁を、私はまだ同じエラーを取得します。私は、配列として何かを間違って扱うことと何かを考える。 –

関連する問題