我需要将这种类型的 JSON 数据解析为 java 对象:
{"id": 1, "blob": "example text"}
{"id": 2, "blob": {"to": 1234, "from": 4321, "name": "My_Name"}}
我正在使用 Gson,但不知道如何解决这个特定问题,即“blob”有时是字符串,有时是对象。
最佳答案
解决您的问题的一种方法是为您的类编写 TypeAdapter
,但是如果您的示例中只有这样的情况,您可以实现相同的结果,让 Gson 使用最通用的类来为您完成反序列化工作。
我的意思显示在下面的代码中。
package stackoverflow.questions.q19478087;
import com.google.gson.Gson;
public class Q19478087 {
public class Test {
public int id;
public Object blob;
@Override
public String toString() {
return "Test [id=" + id + ", blob=" + blob + "]";
}
}
public static void main(String[] str){
String json1 = "{\"id\": 1, \"blob\": \"example text\"}";
String json2 = "{\"id\": 2, \"blob\": {\"to\": 1234, \"from\": 4321, \"name\": \"My_Name\"}}";
Gson g = new Gson();
Test test1 = g.fromJson(json1, Test.class);
System.out.println("Test 1: "+ test1);
Test test2 = g.fromJson(json2, Test.class);
System.out.println("Test 2: "+ test2);
}
}
这是我的执行:
Test 1: Test [id=1, blob=example text]
Test 2: Test [id=2, blob={to=1234.0, from=4321.0, name=My_Name}]
在第二种情况下,blob 将被反序列化为 LinkedTreeMap,因此您可以使用例如
((Map) test2.blob).get("to")
访问其元素;让我知道这是否足够,或者您是否也对类型适配器解决方案感兴趣。
关于java - 使用 Gson 反序列化有时是字符串有时是对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19478087/