2013-11-21 186 views
1

這是我想用Gson解析的JSON字符串。我想快速簡單地解析它。使用Gson解析JSON數組數

{ 
    "values": [ 
     [ 
      1, 
      1, 
      0, 
      0, 
      0, 
      0, 
      11, 
      0.09090909090909091 
     ], 
     [ 
      [ 
       0, 
       0, 
       0, 
       0, 
       0, 
       1, 
       0 
      ], 
      [ 
       0, 
       0, 
       0, 
       0, 
       0, 
       1, 
       0 
      ], 
      [ 
       0, 
       0, 
       0, 
       0, 
       0, 
       0, 
       0 
      ], 
      [ 
       0, 
       0, 
       0, 
       0, 
       0, 
       0, 
       0 
      ], 
      [ 
       0, 
       0, 
       0, 
       0, 
       0, 
       0, 
       0 
      ], 
      [ 
       0, 
       0, 
       0, 
       0, 
       0, 
       0, 
       0 
      ], 
      [ 
       0, 
       0, 
       0, 
       0, 
       0, 
       11, 
       0 
      ], 
      [ 
       0, 
       0, 
       0, 
       0, 
       0, 
       0.09090909090909091, 
       0 
      ] 
     ] 
    ] 
} 

但我不知道如何用Gson編寫解析代碼。 最好的結果是,如果我可以從解析對象中提取列表。

是否有可能我寫這樣的課。

class Value 
{ 
    @SerializedName("0") 
    List<Float> value1; 
    @SerializedName("1") 
    List<Integer> value2; 
    ........... 
} 

感謝大家幫助我。

+2

很高興知道您要解析,但您想要提取哪些數據? –

+0

還有,你到目前爲止嘗試過什麼? – 2Dee

+0

我想得到所有的信息解析 – friddle

回答

2

這是我知道讓你在最適合你的使用的格式需要的信息的最快方式。

您的JSON由包含list1的列表組成 - 列表double和列表2,列表double的列表。假設你想解析你提供的例子,這是一個你可以使用的自包含的類。

如果您需要關於工作原理的模式細節,請隨時詢問。

package stackoverflow.questions; 

import java.lang.reflect.Type; 
import java.util.List; 

import stackoverflow.questions.Test.Wrapper; 

import com.google.gson.*; 
import com.google.gson.reflect.TypeToken; 

public class Q20118749 { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     String json = "{\"values\":[[1,1,0,0,0,0,11,0.09090909090909091],[[0,0,0,0,0,1,0],[0,0,0,0,0,1,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,11,0],[0,0,0,0,0,0.09090909090909091,0]]]}"; 

     JsonElement je = new JsonParser().parse(json); 
     JsonArray list = je.getAsJsonObject().get("values").getAsJsonArray(); // to get rid of the value part 

     Type listType1 = new TypeToken<List<Double>>() {}.getType(); 
     Type listType2 = new TypeToken<List<List<Double>>>() {}.getType(); 

     Gson g = new Gson(); 

     List<Double> listOfDouble = g.fromJson(list.get(0), listType1); 
     List<List<Double>> listOfListOfDouble = g.fromJson(list.get(1), listType2); 

     System.out.println(listOfDouble); 
     System.out.println(listOfListOfDouble); 
    } 

} 

這是我的執行:

[1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.09090909090909091] 
[[0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.09090909090909091, 0.0]] 

如果你的數據的變化,當然,你必須改變根據此代碼。

+0

我更新我的問題,謝謝你回答我。但我真的想寫一個班,使用類。謝謝 – friddle

+0

你的JSON是否修復? – giampaolo

+0

謝謝,它固定,但它不適合我。 – friddle

0

使用此代碼。

public class MyObject{ 
    @SerializedName("values") 
    private Values[] mValues; 

    public Value[] getLoc() { 
return mvalues; 
} 
} 

public class Values{ 
@SerializedName("0") 
private Zero[] mZero; 

@SerializedName("1") 
private One[] mOne; 

public Zero[] getZero() { 
return mZero; 
} 

public Value[] getOne() { 
return mOne; 
} 
} 

public class Zero{ 
@SerializedName("0") 
private zint zero; 

public int getZeroValue() { 
    return zero; 
......... 
} 

} 

這樣你必須寫

+0

我會試試這個。如果工作感謝。 – friddle

+0

是否有人使用列表或列表?謝謝! – friddle