2015-12-04 2 views
4

меня JSONObject, как показано нижеУдалить ключ из Json внутри JSONObject

{"status":"ACTIVE","accounts":{"email":"[email protected]","name":"Test"}} 

Как я могу удалить JSon ключ «электронная почта» и его значение из JSONObject, используя что-то вроде jsonObj.remove("email") в Java

JsonObj .removev работает для меня, если мне нужно, чтобы удалить статус ключа jsonObj.remove("status")

Update

Некоторые более фона, Это, главным образом, для тестирования конечной точки отдыха. В моем тесте я создал Java сопоставления объектов для полезной нагрузки с Builder шаблон, а затем тайному к Json с использованием GsonBuilder как

import com.google.gson.GsonBuilder; 
import com.google.gson.JsonObject; 
public class JsonConvertor() { 
public static JsonObject convertToJsonObject(Object payload) { 
GsonBuilder builder = new GsonBuilder(); 
return (JsonObject) builder.setFieldNamingPolicy(FieldNamingPolicy.Policy). 
      create().toJsonTree(payload); 
}} 

Если мне нужно удалить обязательное поле я использую, JsonObj.remove («ключ») на объекте Json созданный вышеуказанной функцией.

+1

'accounts' - это сам объект, поэтому ваш' jsonObj' должен указывать на этот объект. Кроме того, пожалуйста, подумайте над тем, чтобы добавить дополнительную информацию к вашему вопросу, так как мы не можем знать, что такое 'jsonObj' (фактический тип, какая библиотека, что она указывает на и т. Д.). Чем больше усилий вы ставите в вопрос, тем больше людей будет готовы помочь. – Thomas

+0

У вас есть объект Java, который соответствует этому JSON? –

+0

да @ melli-182, у меня есть сопоставление Java-объектов с JSON. –

ответ

8

Если Gson похож на Джексона (я предполагаю, что так), вы должны сначала получить «учетные записи» JsonObject из корневого объекта, а затем удалить элемент «email», например. как это:

jsonObj.getAsJsonObject("accounts").remove("email"); 

В качестве альтернативы - и, возможно, предпочтительный способ - вы бы отобразить объект JSON к POJO (тот, который имеет поле «статус», «счета» и «счета» будут указывать на другой POJO) , перейдите к учетным записям-POJO и установите для него «email» значение null. Затем вы переформатируете корневой POJO на JSON и примените параметр, который опускает поля с нулевыми значениями.

Редактировать (ответ на вопрос в комментарии):

Чтобы сделать его коротким, я не знаю, есть ли встроенные функции или нет, но это должно быть выполнимо.

Проблема в том, что если вы просто предоставляете ключи, такие как email и т. Д., Вы можете получить ситуации, когда есть несколько ключей, поэтому определение правильного может быть затруднено. Таким образом, было бы лучше предоставить ключ как accounts.email и разделить «ключ» на подвыражения, а затем пересечь дерево Json с помощью частей или преобразовать Json в POJO и использовать некоторый язык выражений (например, Java EL или OGNL) для пересечь POJO.

Если вы хотите удалить все свойства с именем email, вы можете просто просмотреть все дерево json, проверить, есть ли свойство с этим именем, и если удалите его.

+0

'jsonObj.getAsJsonObject (« accounts »). Remove (« email »);' работает отлично. Спасибо @Thomas. Другой связанный с этим вопрос заключается в том, что лучший способ идентифицировать ключ, который хочет быть удален, - это ключ внутри основного объекта Json (например, «статус») или внутри объекта json основного объекта json (например, «email») –

+0

@AnoopPhilip I ' ll добавить редактирование, поскольку это слишком много для комментария. – Thomas

+0

Спасибо @ Томас, я ценю это! –

Смежные вопросы