Преобразование файла Json в карту с помощью Gson - PullRequest
0 голосов
/ 13 марта 2019

У меня есть следующий файл Json

    [
  {
    "documentId": "138",
    "results": [
      {
        "force_error": true
      },
      {
        "is_duplicate": false
      },
      {
        "is_odd": false
      },
      {
        "is_even": true
      }
    ]
  },
  {
    "documentId": "176",
    "results": [
      {
        "force_error": true
      },
      {
        "is_duplicate": false
      },
      {
        "is_odd": false
      },
      {
        "is_even": true
      }
    ]
  },...etc.

Я пытаюсь взять этот файл и сделать из него карту или хэш-карту (позже я планирую сравнить ее с документом на cosmodb). Как я могу превратить этот Json в объект, используя Gson? Спасибо за помощь!


Обновлено @Jay Gong.

Извините, что обновил ваш вопрос напрямую, так как это не может быть ясно в комментарии.

У вас есть данные, как показано ниже:

  {
    "documentId": "138",
    "results": [
      {
        "force_error": true
      },
      {
        "is_duplicate": false
      },
      {
        "is_odd": false
      },
      {
        "is_even": true
      }
    ]
  }

Тогда у вас есть другие документы против него.

"is_odd": {
    "values": [{
        "source": "internal",
        "locale": "en-US",
        "value": false
    }]
}, 
"is_even": {
    "values": [{
        "source": "internal",
        "locale": "en-US",
        "value": true
    }]
}

После этого вы хотите объединить его по свойствам соответствия.

{
        "documentId": "138",
        "results": [
          {
            "force_error": true
          },
          {
            "is_duplicate": false
          },
          "is_odd": {
            "values": [{
              "source": "internal",
              "locale": "en-US",
              "value": false
          }]
          }, 
          "is_even": {
            "values": [{
              "source": "internal",
              "locale": "en-US",
              "value": true
          }]
       }
    ]
  }

1 Ответ

0 голосов
/ 14 марта 2019

создайте две карты и добавьте их

Это моё предложение и метод margeJson:

import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import com.google.gson.Gson;

import static org.junit.Assert.assertTrue;

public class MargeJsonTest {

    String json1 = "{\"documentId\":\"138\",\"results\":[{\"force_error\":true},{\"is_duplicate\":false},{\"is_odd\":false},{\"is_even\":true}]}";
    String json2 = "{\"is_odd\":{\"values\":[{\"source\":\"internal\",\"locale\":\"en-US\",\"value\":false}]},\"is_even\":{\"values\":[{\"source\":\"internal\",\"locale\":\"en-US\",\"value\":true}]}}";

    @Test
    public void get() {
        //given
        Gson gson = new Gson();
        //when
        Map<String, Object> margeJson = margeJson(gson, json1, json2);
        //then
        assertTrue(margeJson.containsKey("documentId"));
        assertTrue(margeJson.get("documentId").equals("138"));
        assertTrue(margeJson.containsKey("results"));
        assertTrue(margeJson.containsKey("is_odd"));
        assertTrue(margeJson.containsKey("is_even"));

        //back to String JSON conversion
        System.out.println(gson.toJson(
                margeJson)); // {"is_even":{"values":[{"source":"internal","locale":"en-US","value":true}]},"documentId":"138","is_odd":{"values":[{"source":"internal","locale":"en-US","value":false}]},"results":[{"force_error":true},{"is_duplicate":false},{"is_odd":false},{"is_even":true}]}

    }

    private Map<String, Object> margeJson(Gson gson, String json1, String json2) {

        Map map1 = gson.fromJson(json1, HashMap.class);
        Map map2 = gson.fromJson(json2, HashMap.class);

        Map<String, Object> map = new HashMap<>();
        map.putAll(map1);
        map.putAll(map2);

        return map;

    }

}
...