ОБНОВЛЕНИЕ: Ответ заменен, поскольку вопрос изменен.
Примеры в вопросе не являются допустимыми в формате JSON. Чтобы увидеть, что это должно быть, давайте сгенерируем его как вложенные строки JSON:
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> payloadObj = Map.of("id", "some-random-id", "version", 554471325);
String payloadJson = objectMapper.writeValueAsString(payloadObj);
System.out.println(payloadJson);
Map<String, Object> rootObj = Map.of("payload", payloadJson);
String rootJson = objectMapper.writeValueAsString(rootObj);
System.out.println(rootJson);
String rootString = objectMapper.writeValueAsString(rootJson);
System.out.println(rootString);
Вывод
{"id":"some-random-id","version":554471325}
{"payload":"{\"id\":\"some-random-id\",\"version\":554471325}"}
"{\"payload\":\"{\\\"id\\\":\\\"some-random-id\\\",\\\"version\\\":554471325}\"}"
Третья строка вывода - это то, что должно было бытьтекст первого блока в вопросе.
"{\"payload\":\"{id:\"some-random-id\",version:554471325}\"}"
Но, как вы видите, в этом тексте отсутствует много двойных кавычек и обратной косой черты, поэтому он недопустим для вложенных строк JSON. , поэтому вы не можете ожидать, что анализатор JSON проанализирует его.
Анализаторы JSON часто снисходительны и в любом случае сделают все возможное, чтобы проанализировать его, но не вините синтаксический анализатор, если он ошибается. Обвините исходный текст и исправьте это, вместо того, чтобы пытаться разобрать плохой JSON.
Оригинальный ответ
Ключи должны быть именами или числами, а нецелые сложные объекты, но если вам нужен JSON в качестве ключа в другом JSON, просто дважды вызовите сериализатор JSON.
Пример
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> data1 = Map.of("foo", 42, "bar", List.of(1, 1, 2, 3, 5, 8));
String json1 = objectMapper.writeValueAsString(data1);
System.out.println(json1);
Map<String, Object> data2 = Map.of("Test", "Hello World", json1, 3.14, "End", "Now!");
String json2 = objectMapper.writeValueAsString(data2);
System.out.println(json2);
Примечание: Map.of()
и List.of()
- это Java 9 +
Выход
{"foo":42,"bar":[1,1,2,3,5,8]}
{"{\"foo\":42,\"bar\":[1,1,2,3,5,8]}":3.14,"Test":"Hello World","End":"Now!"}