java - 使用 Gson 解析 JSON 映射/字典?

标签 java json dictionary map gson

我需要解析如下所示的 JSON 响应:

{"key1": "value1", 
 "key2": "value2", 
 "key3": 
    {"childKey1": "childValue1", 
     "childKey2": "childValue2", 
     "childKey3": "childValue3" }
}

class Egg { 
    @SerializedName("key1")
    private String mKey1;

    @SerializedName("key2")
    private String mKey2;

    @SerializedName("key3")
    // ???
}

我正在通读 Gson 文档,但无法弄清楚如何正确地将字典反序列化为 Map。

最佳答案

Gson 很容易将具有名称:值对的 JSON 对象反序列化为 Java Map

以下是使用原始问题中的 JSON 的示例。 (此示例还演示了如何使用 FieldNamingStrategy 来避免为每个字段指定序列化名称,前提是字段到元素的名称映射是一致的。)

import java.io.FileReader;
import java.lang.reflect.Field;
import java.util.Map;

import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Foo
{
  public static void main(String[] args) throws Exception
  {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.setFieldNamingStrategy(new MyFieldNamingStrategy());
    Gson gson = gsonBuilder.create();
    Egg egg = gson.fromJson(new FileReader("input.json"), Egg.class);
    System.out.println(gson.toJson(egg));
  }
}

class Egg
{
  private String mKey1;
  private String mKey2;
  private Map<String, String> mKey3;
}

class MyFieldNamingStrategy implements FieldNamingStrategy
{
  //Translates the Java field name into its JSON element name representation.
  @Override
  public String translateName(Field field)
  {
    String name = field.getName();
    char newFirstChar = Character.toLowerCase(name.charAt(1));
    return newFirstChar + name.substring(2);
  }
}

关于java - 使用 Gson 解析 JSON 映射/字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362587/

相关文章:

java - JDBC连接url设置的优先级是否高于数据库服务器设置?

java - 如何在手机屏幕锁定时暂停计时器

json - 获取 null,$sum 聚合 - Mongo

json - 适用于 EC2 的 CloudFormation 模板 (JSON),具有 VPC、子网和安全组选择

python - 如果值等于给定字典中的键,我如何将第一个键的值附加到所述值的键

java - swagger中spring fox health路由显示多个HTTP方法

php - 使用 Laravel 在 Json 列中搜索

C#:GetHashCode、Equals 和 Dictionary 导致 IndexOutOfRangeException?

Python - 使用字符串添加到字典

Java 代理不会将任何内容发送回浏览器