gpt4 book ai didi

android - 使用谷歌 GSON 解析特定的 JSON

转载 作者:行者123 更新时间:2023-11-29 00:47:20 25 4
gpt4 key购买 nike

我需要解析一个可以定义如下的 JSON 项:

{
...
"itemName": ""
...
}

{
...
"itemName": {

}
...
}

基本上,如果没有值,我正在读取的提要将 itemName 定义为空字符串,否则它是一个我可以很好解析的常规 JSON 对象。

我相信这是导致我遇到 GSON 错误的原因,尽管我可能错了。

我如何解析这样一个 JSON 提要,包括如上所示定义的字段,而不会导致 GSON 错误?或者我怎样才能抑制这个错误并继续解析?

这是日志:

错误/AndroidRuntime(32720):由:com.google.gson.JsonParseException 引起:期望找到对象:“”

我正在使用 AdMob 4.0.4 jar 中包含的 GSON

最佳答案

您需要为此实现自定义反序列化器。下面是一个例子。

// output: 
// {Outer: item=null}
// {Outer: item={Inner: value=foo}}

import java.lang.reflect.Type;

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 Foo
{
static String json1 = "{\"item\":\"\"}";
static String json2 = "{\"item\":{\"value\":\"foo\"}}";

public static void main(String[] args)
{
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Inner.class, new InnerDeserializer());
Gson gson = gsonBuilder.create();
Outer outer1 = gson.fromJson(json1, Outer.class);
System.out.println(outer1);
Outer outer2 = gson.fromJson(json2, Outer.class);
System.out.println(outer2);
}
}

class InnerDeserializer implements JsonDeserializer<Inner>
{
@Override
public Inner deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException
{
if (json.isJsonPrimitive())
{
return null;
}
return new Gson().fromJson(json, typeOfT);
}
}

class Outer
{
Inner item;

@Override
public String toString()
{
return String.format("{Outer: item=%s}", item);
}
}

class Inner
{
String value;

@Override
public String toString()
{
return String.format("{Inner: value=%s}", value);
}
}

这可以很容易地更改为返回一个空的 Inner 实例而不是 null,当然这取决于所需的内容。

关于android - 使用谷歌 GSON 解析特定的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693817/

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