Удалить строку из объекта Json - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь преобразовать событие Avro Kafka в Json, и мне нужно манипулировать событием Avro, удаляя строки из этого события.

Я использую библиотеку GSON для манипулирования объектом Json String, но каким-то образом он не удаляет предполагаемую строку.

JsonElement je = new Gson().fromJson(matchRequest, JsonElement.class);
        JsonObject jo = je.getAsJsonObject();
        jo.remove("com.XXX.XXXX");
        jo.remove("com.XXX.XXX");
        jo.remove("com.XXX.XXX");

        System.out.println("#################"+jo);

Json String I am Receiving as matchRequest is
{"interaction_id":"321","customer_id":"32","context_id":"123","work_id":"ewq","work_request_id":"213","task_type":"123","match_type":"wert","resource_list":{"com.xxx.xxxx":{"rank":1,"resource_data":{"com.xxx.xxxx":{"account_id":1,"source_name":"Mankind","channel_id":"voice"}}}},"service_list":{"com.xxx.xxxx":{"rank":5,"priority":1,"resource_count":"gvk","min_proficiency":"10","max_proficiency":"1","attributes":{"com.xxx.xxxx":{"category":"edw","value":"33232"}},"resource_offered":{"com.xxx.xxxx":{"agent_id":"rewq","account_id":"123","source_name":"wqe","resource_address":"ewq","source_address":"rewq","channel_id":"212","channel_provider":"wqe"}}}},"matching_state":"OFFERED"}

Формат JSON

    "interaction_id": "321",
  "customer_id": "32",
  "context_id": "123",
  "work_id": "ewq",
  "work_request_id": "213",
  "task_type": "123",
  "match_type": "wert",
  "resource_list": {
    "com.XXXXXX": {
      "rank": 1,
      "resource_data": {
        "com.XXXX": {
          "account_id": 1,
          "source_name": "Mankind",
          "channel_id": "voice"
        }
      }
    }
  },
  "service_list": {
    "com.XXXX": {
      "rank": 5,
      "priority": 1,
      "resource_count": "gvk",
      "min_proficiency": "10",
      "max_proficiency": "1",
      "attributes": {
        "com.XXXX": {
          "category": "edw",
          "value": "33232"
        }
      },
      "resource_offered": {
        "com.XXXX": {
          "agent_id": "rewq",
          "account_id": "123",
          "source_name": "wqe",
          "resource_address": "ewq",
          "source_address": "rewq",
          "channel_id": "212",
          "channel_provider": "wqe"
        }
      }
    }
  },
  "matching_state": "OFFERED"
}

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Вам необходимо выполнить операцию над массивом:

jo.getAsJsonObject("resource_list").remove("com.XXX.XXXX");

Это должно сработать.

0 голосов
/ 15 апреля 2019

Когда вы смотрите документацию по методу remove(), ему нужен ключ от объекта JSON в параметре.

Однако JSON , который вы получаете, не содержит « com.xxx.xxxx » в качестве ключа, но некоторые ключи, такие как « resource_list », связаны с другим JSON объектом, содержащим в качестве ключа « com.xxx.xxxx ».

Возможно, вы захотите рекурсивно взглянуть на получаемый вами объект JSON , чтобы удалить намеченный String .

...