变换地图<list <long>,List <long>&gt;字符串和后面</long> </list <long>

时间:2014-11-18 11:28:08

标签: java json dictionary serialization

我试着用Gson做,但是你不必运行代码来看它没有多大意义:

final Map<List<Double>, List<Double>> map = new Gson().fromJson("{[111,222]=[333,444], [555,666]=[777,000]}", Map.class);

我收到了MalformedJsonException。有没有人知道如何在不创建自定义类的情况下执行此操作?

它绝不能与Json相关,也欢迎其他方法。并且它不是一个地图,它可以是一个对的列表,无论如何我永远不会使用列表作为关键字,我将迭代它。

我期待着阅读你的新鲜想法:)

2 个答案:

答案 0 :(得分:1)

您的JSON字符串错误有两个原因:

  1. 数组不能是密钥,即[555,666]无效的密钥
  2. 用于将键与值相关联的符号为:而不是=

答案 1 :(得分:1)

这有点hacky但可以用作反序列化字符串的方法。 序列化将使用Gson.toJson(map)完成。

    final Map<String, List<Double>> map = new Gson().fromJson("{\"[1,2,3,5]\"=[4,5,6]}", Map.class);
    final Map<List<Long>, List<Long>> result = Maps.newHashMap();
    for (final Map.Entry<String, List<Double>> entry : map.entrySet()) {
        final List<Long> value = Lists.newArrayList();
        for (final Double number : entry.getValue()) {
            value.add(number.longValue());
        }
        final List<Double> rawKey = new Gson().fromJson(entry.getKey(), List.class);
        final List<Long> key = Lists.newArrayList();
        for (final Double number : rawKey) {
            key.add(number.longValue());
        }
        result.put(key, value);
    }
    System.out.println(result);