Gson映射密钥对到json [英] Gson Map Key Pair to json

查看:103
本文介绍了Gson映射密钥对到json的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将此解析为JSON:

I want to parse to JSON this:

Map<Pair<String, Date>, Product>

由于JSON不能具有对具有键,因此它显然给了我这样的信息:

Since JSON cannot have a Pair has key it obviously gives me something like this:

{"android.util.Pair@a24f8432":{"Name:"name","Brand":"brand"....}}

在这一点上,要实现我的目标,我必须创建我的Pair<String, Date>对象序列化和反序列化方法.

At this point to achieve my goal I'll have to create my Pair<String, Date> Object Serialize and Deserialize methods.

这是我需要您帮助的地方,我不知道该怎么做.我是否必须创建MyPair类扩展Pair并实现JsonSerializer<Pair<String, Date>> ...?

This is where I need your help, I have no idea how to do this. Do I have to create MyPair class extending Pair and implementing JsonSerializer<Pair<String, Date>> ...?





所以我正在尝试使用TypeAdapter<T>,但是没有运气...





So I'm trying to use TypeAdapter<T> but with no luck...

public class MyTypeAdapter extends TypeAdapter<Pair<String, Date>> {

@Override
public Pair<String, Date> read(JsonReader jsonReader) throws IOException {
    if (jsonReader.peek() == JsonToken.NULL) {
        jsonReader.nextNull();
        return null;
    }

    String id = jsonReader.nextString();

    Date evaluated = null;

    try {
        evaluated = mySimpleDateFormat.parse(jsonReader.nextString());
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return new Pair<String, Date>(id,evaluated);
}

@Override
public void write(JsonWriter jsonWriter, Pair<String, Date> stringDatePair) throws IOException {
    if (stringDatePair == null) {
        jsonWriter.nullValue();
        return;
    }
    String output = stringDatePair.first + "," + stringDatePair.second;
    jsonWriter.value(output);
}
}

但是当我注册TypeAdapter时:

But when I register my TypeAdapter:

Type TYPE = new TypeToken<Pair<String, Date>>() {}.getType();


 GsonBuilder builder = new GsonBuilder();
    builder.registerTypeAdapter(TYPE, new MyTypeAdapter());
    Gson g = builder.create();
    String test = g.toJson(new Pair<String, Date>("123",new Date()));


此:

builder.registerTypeAdapter(TYPE, new MyTypeAdapter());

给我NullPointerException ... 为什么?

Gives me NullPointerException... Why?

推荐答案

 Gson gson = new GsonBuilder()
                .registerTypeAdapter(TYPE, new MyTypeAdapter())
                .enableComplexMapKeySerialization()
                .create();

好,所以我错过了这个重要的选择:

Ok so I was missing this importante option:

            .enableComplexMapKeySerialization()

希望有帮助!

这篇关于Gson映射密钥对到json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆