【问题标题】:How to deserialize only some fields in JSON?如何仅反序列化 JSON 中的某些字段?
【发布时间】:2013-10-23 18:10:30
【问题描述】:

我正在使用 Gson 提取一些字段。顺便说一句,我不想​​创建一个类,因为我在所有 JSON 响应中只需要一个值。这是我的回应:

{
    "result": {
        "name1": "value1",
        "name2": "value2",
    },
    "wantedName": "wantedValue"
}

我需要wantedValue,但我不想为反序列化创建整个类。是否可以使用 Gson 实现这一目标?

【问题讨论】:

  • 您可以自己解析 JSON 以找到“wantedName”值。
  • @Cruncher 我在考虑正则表达式,但我想尽可能避免使用它。
  • 你可以创建一个ExclusionStrategy,见这里:stackoverflow.com/questions/4802887/…

标签: java json serialization gson


【解决方案1】:

如果您只需要一个字段,请使用JSONObject

import org.json.JSONException;
import org.json.JSONObject;


public class Main { 
public static void main(String[] args) throws JSONException  {

    String str = "{" + 
            "    \"result\": {" + 
            "        \"name1\": \"value1\"," + 
            "        \"name2\": \"value2\"," + 
            "    }," + 
            "    \"wantedName\": \"wantedValue\"" + 
            "}";

    JSONObject jsonObject = new JSONObject(str);

    System.out.println(jsonObject.getString("wantedName"));
}

输出:

wantedValue

【讨论】:

    【解决方案2】:

    如果您不必使用 Gson,我会使用 https://github.com/douglascrockford/JSON-java。您可以轻松提取单个字段。我找不到使用 Gson 做这么简单的事情的方法。

    你会这样做

    String wantedName = new JSONObject(jsonString).getString("wantedName");
    

    【讨论】:

      【解决方案3】:

      可以只使用gson的一部分,用来解析json:

      Reader reader = /* create reader from source */
      Streams.parse(new JsonReader(reader)).getAsJsonObject().get("wantedValue").getAsString();
      

      【讨论】:

        猜你喜欢
        • 2017-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多