首页 > 解决方案 > 如何在Java中反序列化这个json?

问题描述

  [
      "news",
      "{\"marketType\":\"chako\",\"data\":\"[{\\\"price\\\":572.05,\\\"qty\\\":106},{\\\"price\\\":224.08,\\\"qty\\\":700.25},{\\\"price\\\":440.5,\\\"qty\\\":600.55}]\"}"
        ]

我通过 websocket 在 chrome 中获取这些数据。这实际上以 42 开头,但为简单起见,我已将其删除,因为它可以通过String.split("42",2). 尝试了自定义反序列化器和其他东西,但没有运气。

标签: javajsonjackson

解决方案


它看起来像是一个数组,其中第二个元素是一个包含 JSON 的字符串,它有 2 个字段,marketType并且data. data又是一个包含 JSON 的字符串。

编辑:Java解决方案

    void test() throws IOException {
        String json = "["
            + "\"news\","
            + " \"{\\\"marketType\\\":\\\"chako\\\",\\\"data\\\":\\\"[{\\\\\\\"price\\\\\\\":572.05,\\\\\\\"qty\\\\\\\":106},{\\\\\\\"price\\\\\\\":224.08,\\\\\\\"qty\\\\\\\":700.25},{\\\\\\\"price\\\\\\\":440.5,\\\\\\\"qty\\\\\\\":600.55}]\\\"}\""
            + "]";
        ObjectMapper mapper = new ObjectMapper();
        List<String> arr = mapper.readValue(json, new TypeReference<List<String>>() {});
        Map<String, String> obj = mapper.readValue(arr.get(1), new TypeReference<Map<String, String>>() {});

        List<Map<String, Number>> data = mapper.readValue(obj.get("data"), new TypeReference<List<Map<String, Number>>>() {});

        System.out.println(data);
    }

编辑前:

用于 chrome 的 JavaScript 解决方案。

const arr =   [
      "news",
      "{\"marketType\":\"chako\",\"data\":\"[{\\\"price\\\":572.05,\\\"dairy\\\":106},{\\\"price\\\":224.08,\\\"dairy\\\":700.25},{\\\"price\\\":440.5,\\\"dairy\\\":600.55}]\"}"
        ];
const record = JSON.parse(arr[1]);
const data = JSON.parse(record["data"])
console.log(data) // This is an array or objects with "price" and "dairy" properties

推荐阅读