gpt4 book ai didi

具有内部数组转换的 JSON 到字符串

转载 作者:行者123 更新时间:2023-12-02 05:08:11 26 4
gpt4 key购买 nike

我有一个 larga 数据 JSON,我想将其传递到后端,在那里进行解析以成为 java 对象。

为此,我使用了 JSON.stringify 函数,但在 JSON 内部有一个数组属性,JSON.stringify 用引号 (") 将其括起来,所以当 Gson 找到它时(我在后端将字符串解码为对象),它会抛出错误,因为这不是 JSON 字符串表示中的数组,而是 JSON 字符串表示中的字符串属性。

这是使用 JSON.stringify 生成的字符串示例:

{"id":0, "array": "[{\"id\":0, \"cod\": \"XXX\"}, {\"id\":0, \"cod\": \"XXX\"}]"}

数组属性不能被Gson转换,因为它不是数组。

谁能帮我解决这个问题?

非常感谢。

最佳答案

我可能更愿意修复生成的 JSON,但如果这不可能或更可取,看起来您只需要将 JSON 的一部分反序列化两次。这可以通过如下自定义反序列化器来完成。

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

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

public class GsonFoo
{
public static void main(String[] args)
{
// With the generated JSON corrected:

// {"id":42, "array": [{"id":1, "cod": "aaa"}, {"id":2, "cod": "bbb"}]}
String jsonInput = "{\"id\":42, \"array\": [{\"id\":1, \"cod\": \"aaa\"}, {\"id\":2, \"cod\": \"bbb\"}]}";

Gson gson = new Gson();

Bar bar1 = gson.fromJson(jsonInput, Bar.class);
System.out.println(bar1);
// Bar: id=42, array=[Thing: id=1, cod=aaa, Thing: id=2, cod=bbb]

// -------------------------

// With the funky JSON:

// {"id":42, "array": "[{\"id\":1, \"cod\": \"aaa\"}, {\"id\":2, \"cod\": \"bbb\"}]"}
String funkyJsonInput = "{\"id\":42, \"array\": \"[{\\\"id\\\":1, \\\"cod\\\": \\\"aaa\\\"}, {\\\"id\\\":2, \\\"cod\\\": \\\"bbb\\\"}]\"}";

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Thing[].class, new FunkyThingArrayDeserializer());
gson = gsonBuilder.create();

Bar bar2 = gson.fromJson(funkyJsonInput, Bar.class);
System.out.println(bar2);
// Bar: id=42, array=[Thing: id=1, cod=aaa, Thing: id=2, cod=bbb]
}
}

class FunkyThingArrayDeserializer implements JsonDeserializer<Thing[]>
{
@Override
public Thing[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException
{
String actualJson = context.deserialize(json, String.class);
return new Gson().fromJson(actualJson, Thing[].class);
}
}

class Bar
{
int id;
Thing[] array;

@Override
public String toString()
{
return String.format("Bar: id=%d, array=%s", id, Arrays.toString(array));
}
}

class Thing
{
int id;
String cod;

@Override
public String toString()
{
return String.format("Thing: id=%d, cod=%s", id, cod);
}
}

关于具有内部数组转换的 JSON 到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8733425/

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