如何在 Java 中反序列化此 json?

How to deserialize this json in Java?

  [
      "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) 删除。尝试了自定义反序列化器和其他东西,但没有成功。

看起来是一个数组,其中第二个元素是包含JSON的字符串,它有2个字段,marketTypedatadata 又是一个包含 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);
    }

编辑前:

Java用于 chrome.

的脚本解决方案
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

所以这是一个有点混乱的字符串化数据。要取消字符串化或解析此数据,您需要对对象和每个对象使用 JSON.parse 属性。你需要先隔离数组的第二部分。然后解析对象中的数据对象。本质上,您具有双字符串化的子属性。如果您可以控制另一端,我可能会建议您修复导致您对对象属性进行字符串化的错误。

let array = [
      "news",
      "{\"marketType\":\"chako\",\"data\":\"[{\\"price\\":572.05,\\"qty\\":106},{\\"price\\":224.08,\\"qty\\":700.25},{\\"price\\":440.5,\\"qty\\":600.55}]\"}"
        ];
let object = JSON.parse(array[1]);
object.data = JSON.parse(data);

如果出于某种原因您有多个像这样的字符串化子属性,您可能需要使用 object.keys 并创建一个递归循环。

试试这个:

ObjectMapper mapper = new ObjectMapper();

Map<String,Object> map = mapper.readValue(json, Map.class);