gpt4 book ai didi

java - 如何使用gson库准备json文件

转载 作者:行者123 更新时间:2023-11-30 06:36:42 26 4
gpt4 key购买 nike

我有两个普通的 pojo 对象:

例如:

class person{
private String name;
private String id;
}
class address{
private String homeaddress;
private String officeaddress;
}

如何使用 Gson 创建 JSON 文件如下所示的库:

{
"person": [{name:"test",id:1}]
"address": { homeaddress:testtt, "officeaddress":testzzzz}
}

如何使用 Gson.tojson 方法准备 JSON 文件。

最佳答案

问题中的示例 JSON 无效。

我假设目标是以下格式的 JSON。

{
"person":[{"name":"test","id":1}],
"address":{"homeaddress":"testtt","officeaddress":"testzzzz"}
}

对于 Gson,您最好使用与 JSON 完全匹配的 Java 数据结构。这是一个例子。

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;

public class Foo
{
public static void main(String[] args)
{
Person person = new Person("name1", 1);
List<Person> personList = new ArrayList<Person>(1);
personList.add(person);
Address address = new Address("home1", "office1");
Thing thing = new Thing(personList, address);

Gson gson = new Gson();
String json = gson.toJson(thing);
System.out.println(json);
}
}

class Thing
{
private List<Person> person;
private Address address;

Thing(List<Person> person, Address address)
{
this.person = person;
this.address = address;
}
}

class Person
{
private String name;
private int id;

Person(String name, int id)
{
this.name = name;
this.id = id;
}
}

class Address
{
private String homeaddress;
private String officeaddress;

Address(String homeaddress, String officeaddress)
{
this.homeaddress = homeaddress;
this.officeaddress = officeaddress;
}
}

如果无法获得与目标 JSON 结构相匹配的 Java 类结构,并且您只能使用原始类,那么您可以使用 JsonWriter一次构建 JSON 一个标记。这是一个例子。

  public static void main(String[] args) throws Exception
{
Person person = new Person("name1", 1);
Address address = new Address("home1", "office1");

StringWriter out = new StringWriter();
JsonWriter writer = new JsonWriter(out);
writer.setIndent(" ");
writer.beginObject();
writer.name("person");
writer.beginArray().beginObject();
writer.name("name").value(person.getName());
writer.name("id").value(person.getId());
writer.endObject().endArray();
writer.name("address");
writer.beginObject();
writer.name("homeaddress").value(address.getHomeaddress());
writer.name("officeaddress").value(address.getOfficeaddress());
writer.endObject();
writer.endObject();
writer.close();
System.out.println(out);
}

为了完整起见,我还要指出可以使用一个简单的自定义序列化程序来解决这个问题。

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

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

public class Foo
{
public static void main(String[] args) throws Exception
{
Person person = new Person("name1", 1);
Address address = new Address("home1", "office1");
SomeContainer thing = new SomeContainer(person, address);

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Person.class, new MyCustomSerializer());
Gson gson = gsonBuilder.create();
System.out.println(gson.toJson(thing));
}
}

class MyCustomSerializer implements JsonSerializer<Person>
{
@Override
public JsonElement serialize(Person src, Type typeOfSrc, JsonSerializationContext context)
{
List<Person> personList = new ArrayList<Person>();
personList.add(src);
return new Gson().toJsonTree(src);
}
}

class SomeContainer
{
Person person;
Address address;
SomeContainer(Person p, Address a) {person = p; address = a;}
}

class Person
{
private String name;
private int id;
Person(String n, int i) {name = n; id = i;}
}

class Address
{
private String homeaddress;
private String officeaddress;
Address(String h, String o) {homeaddress = h; officeaddress = o;}
}

当然,可以从原始 Java 数据结构构造一个 JsonElement 树,然后操作 JSON 树以匹配所需的输出,最后将其序列化。

关于java - 如何使用gson库准备json文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com