当前位置: 首页 > 知识库问答 >
问题:

如何使用Gson将如下所示的JSON响应转换为POJO?

薄伟彦
2023-03-14

我的JSON的格式是:

{"abc": [{
  "field_1": "string_1",
  "value": 0.304
},
{
  "field_1": "string_2",
  "value": 0.193
}]}

“abc”是变量,“field_1”和“value”是字段名。我希望Java中的一个类以某种格式存储这个JSON,例如:

 String t;                      // should store "abc"
 List<myClass> myClassObject;   // myClass should contain "field_1" and "value"

我的班级。JAVA

String field_1;              // should store "string_1" and "string_2"
Double value;                // should store 0.304 and 0.193

我想要我的班级。java,因为将来我可能想在JSON响应中添加更多元数据。这是一个复杂的对象映射,但我不知道我的类应该是什么样子来存储JSON响应。

共有2个答案

孟胤
2023-03-14

我将与您分享示例代码:

主要方法:

import com.google.gson.Gson;
public class GsonConversion {
public static void main(String[] args) {
    String json = "{\"abc\": [{" + 
            "  \"field_1\": \"string_1\"," + 
            "  \"value\": 0.304" + 
            "}," + 
            "{" + 
            "  \"field_1\": \"string_2\"," + 
            "  \"value\": 0.193" + 
            "}]}";
    Gson gson = new Gson();
    Type mapType = new TypeToken<Map<String, List<Data>>>() {
        }.getType();
        Map<String, List<Data>> map = gson.fromJson(json, mapType);
        Model model= new Model();
        map.entrySet().stream().forEach(entry->{
            model.setT(entry.getKey());
            model.setAbc(entry.getValue());
        });
        System.out.println("Key:"+model.getT());
        model.getAbc().stream().forEach(x->{
            System.out.println("Field:"+x.getField_1()+" Value:"+x.getValue());
        });
   }
}

父模型对象:i)模型类

import java.util.ArrayList;

public class Model {
   private String t;
   private ArrayList<Data> abc = new ArrayList<>();

   public String getT() {
        return t;
   }

   public void setT(String t) {
       this.t = t;
   }

   public ArrayList<Data> getAbc() {
         return abc;
   }

   public void setAbc(ArrayList<Data> abc) {
       this.abc = abc;
   }
}

ii)数据

public class Data {
   private String field_1;
   private Double value;

   public Data() {
   }

   public String getField_1() {
       return field_1;
   }

    public void setField_1(String field_1) {
       this.field_1 = field_1;
   }

    public Double getValue() {
       return value;
   }

   public void setValue(Double value) {
       this.value = value;
   }
}
洪飞驰
2023-03-14

对于根对象,不要创建新的POJO,只需使用Map示例如下所示:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

public class GsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Gson gson = new GsonBuilder().create();

        Type mapType = new TypeToken<Map<String, List<Item>>>() {
        }.getType();
        Map<String, List<Item>> map = gson.fromJson(new FileReader(jsonFile), mapType);
        Map.Entry<String, List<Item>> first = map.entrySet().stream().findFirst().get();
        Items items = new Items(first.getKey(), first.getValue());

        System.out.println(items);
    }
}

class Items {
    private final String key;
    private final List<Item> items;

    public Items(String key, List<Item> items) {
        this.key = key;
        this.items = items;
    }

    public String getKey() {
        return key;
    }

    public List<Item> getItems() {
        return items;
    }

    @Override
    public String toString() {
        return "Items{" +
                "key='" + key + '\'' +
                ", items=" + items +
                '}';
    }
}

class Item {

    @SerializedName("field_1")
    private String field;
    private Double value;

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }

    public Double getValue() {
        return value;
    }

    public void setValue(Double value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "Item{" +
                "field='" + field + '\'' +
                ", value=" + value +
                '}';
    }
}

以上代码打印:

Items{key='abc', items=[Item{field='string_1', value=0.304}, Item{field='string_2', value=0.193}]}
 类似资料:
  • 问题内容: 我正在从返回JSON格式数据的服务器请求数据。发出请求时,将HashMap转换为JSON并不难,但另一种方式似乎有些棘手。JSON响应如下所示: 哪种方法最容易访问此数据?我正在使用GSON模块。 问题答案: 干得好:

  • 问题内容: 我正在从返回JSON格式数据的服务器请求数据。发出请求时,将HashMap转换为JSON并不困难,但另一种方式似乎有些棘手。JSON响应如下所示: 哪种方法最容易访问此数据?我正在使用GSON模块。 问题答案:

  • 问题内容: 我有一个可以返回JSON数组或对象的API。JSON对象示例 JSON数组: 将JSON对象响应映射到POJO时,我使用: 当将JSON数组响应映射到POJO数组时,我使用: 如何将这两个响应动态转换为适当的类型? 注意:我无法修改服务器响应,这是一个公共API。 谢谢! 编辑: 我正在尝试实现一种自动执行此操作的方法,但是我缺少了一些东西。方法 它返回s 的列表。如何修改代码以返回与

  • 问题内容: 假设我有json字串 现在我有一个班级用户 现在如何将上述json字符串转换为用户类对象 问题答案: 试试这个:

  • 问题内容: 我有一个列表,我需要使用GSON将其转换为JSON对象。我的JSON对象中包含JSON数组。 以下是我的代码,其中我需要将列表转换为其中具有JSON数组的JSON对象- 到目前为止,列表中只有两项-所以我需要这样的JSON对象- 做这个的最好方式是什么? 问题答案: 如果在您的方法中为,则应进行序列化。 这将为您提供所需的JSON输出。

  • 我正在尝试从json转换为Java对象。我收到一个json字符串,其中包括一个书籍列表: 我创建了一个名为Books的对象: 另外,我正在使用doGet方法从RESTful webservice中以以下方式检索这些数据: 干杯