我需要将这种类型的 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/

10-13 05:32