【问题标题】:Parse JSON number array using Gson使用 Gson 解析 JSON 数字数组
【发布时间】:2013-11-21 10:45:03
【问题描述】:

这是我想用 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 编写解析代码。 最好的结果是如果我可以从解析的对象中提取 List。

有没有可能我写一个这样的课程。

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

感谢大家帮助我。

【问题讨论】:

  • 很高兴知道您要解析,但是您要获取什么数据?
  • 还有,到目前为止你尝试过什么?
  • 我要获取所有信息解析

标签: java json gson


【解决方案1】:

这是我所知道的以最适合您的格式获取所需信息的最快方式。

您的 JSON 由包含 list1(双精度列表)和 list2(双精度列表)的列表组成。假设您想准确解析您提供的示例,这是一个您可以使用的自包含类。

如果您需要有关其工作原理的模式详细信息,请随时询问。

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]]

如果你的数据发生变化,当然要根据这个代码来修改。

【讨论】:

  • 我更新了我的问题,谢谢你回答我。但我真的很想用这个类写一个类。谢谢
  • 究竟有什么不满意的地方?
【解决方案2】:

使用此代码。

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;
 .........
 }

}

这样你必须写

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多