Удалить элементы из строки JSON - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть строка JSON следующим образом:

{
   "account": "1234",
   "type": "ar-type",
   "eventTypes": "Update",
   "objectClassName": "com.triype",
   "objectJson": "{\"Name\":\"pdpot\",\"traptype\":\"adpot",\"displayName\":\"pdpot",\"experimentName\":\"pdpotpie\",\"creationTime\":\"Mar 18, 2020 5:58:58 PM\",\"createdBy\":{\"userProfileOne\":\"s:pdx\",\"userProfileTwo\":\"sid\",\"domainId\":\"did:pdx-tod-64003\"},\"lastModifiedBy\":{\"userProfileArn\":\"s:pdx-tod-64003\"},\"createdBy\":{\"userProfileOne\":\"s:p\",\"userProfileTwo\":\"si\",\"domainId\":\"did:ppot\"}}}
}

Я получаю этот ввод в виде строки, и перед передачей его в виде строки в анализатор мне нужно выполнить некоторую фильтрацию строк и удалить все " userProfileOne "," userProfileTwo "," domainId "и их ключи без ущерба для структуры JSON. В настоящее время я пишу этот код в Java, используя gson и json.

Примечание. Существует несколько случаев использования UserProfileOne, UserProfileTwo и DomainID.

Требуемый вывод выглядит следующим образом:

{
   "account": "1234",
   "type": "ar-type",
   "eventTypes": "Update",
   "objectClassName": "com.triype",
   "objectJson": "{\"Name\":\"pdpot\",\"traptype\":\"adpot",\"displayName\":\"pdpot",\"experimentName\":\"pdpotpie\",\"creationTime\":\"Mar 18, 2020 5:58:58 PM\"}}
}

В настоящее время я использую substringBetween. Но операция не работает, как задумано.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Потенциальный подход - десериализовать json в структуру java, а затем отфильтровать эту структуру, задав нулевые поля, которые вы не хотите сериализовать.

Используя фреймворк, такой как Джексон, вы можете установить это до сериализации на ObjectMapper

mapper.setSerializationInclusion(Include.NON_NULL). Таким образом, все нулевые значения не будут сериализованы в окончательный JSON / результат.

0 голосов
/ 14 апреля 2020

Я думаю, что лучший поддерживаемый способ - создать структуру класса, соответствующую этому json, и сопоставить ее с классом. Используйте @JsonIgnore для полей, которые нужно игнорировать, а затем сопоставьте его с JSON из структуры класса.

Другой подход, немного сложный для реализации, заключается в go через каждый узел в json и удалите этот узел, если он не требуется

Вы также можете сделать это путем сопоставления строк, но я не думаю, что это хороший подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...