Gson은 길이 1의 json 배열을 JsonObject 객체 대신 JsonArray 객체로 구문 분석합니다.

ThisClark

Gson을 사용하여 json 객체가 하나의 요소가있는 배열 값을 갖도록 강제하려고합니다. 이 방식으로 json을 구성하지만 JsonParser는 길이 1의 배열 대신 새 JsonObject를 만듭니다. 내 시스템에서 대부분의 json은 길이 1보다 큰 배열 값을 가지며 올바르게 구문 분석됩니다.

나는 JsonObject를 JsonArray에 강제로 강제하는 유틸리티 메서드를 시도하는 동안 이것을 발견했습니다. 예상대로 작동하지 않습니다.

static JsonArray bruteForceJsonArray(JsonObject object, String key) {
    if(object.get(key).isJsonArray()) {
        return object.get(key).getAsJsonArray();
    } else {
        System.out.println("broken: " + object.toString());
        JsonObject temp = object.get(key).getAsJsonObject();
        String fixed = "{'" + key +  "':[" + temp.toString() + "]}";
        System.out.println("pre-fix: " + fixed);

        //parsing here reduces the array to an object - hot to prevent?     
        temp = new JsonParser().parse(fixed).getAsJsonObject();         
        System.out.println("fixed: " + object.toString());
        return object.get(key).getAsJsonArray();
    }
}

산출:

broken: {"token":{"NER":"O","id":1.0,"word":".","CharacterOffsetEnd":765.0,"Speaker":"PER0","POS":".","lemma":".","CharacterOffsetBegin":764.0}}
pre-fix: {'token':[{"NER":"O","id":1.0,"word":".","CharacterOffsetEnd":765.0,"Speaker":"PER0","POS":".","lemma":".","CharacterOffsetBegin":764.0}]}
fixed: {"token":{"NER":"O","id":1.0,"word":".","CharacterOffsetEnd":765.0,"Speaker":"PER0","POS":".","lemma":".","CharacterOffsetBegin":764.0}}

시스템에서 올바르게 나타나는 대부분의 json의 예 :

{"token":[{"Speaker":"PER0","POS":"IN","lemma":"except","CharacterOffsetBegin":742.0,"NER":"O","id":1.0,"word":"Except","CharacterOffsetEnd":748.0},{"CharacterOffsetEnd":752.0,"Speaker":"PER0","POS":"IN","lemma":"for","CharacterOffsetBegin":749.0,"NER":"O","id":2.0,"word":"for"},{"id":3.0,"word":"extra","CharacterOffsetEnd":758.0,"Speaker":"PER0","POS":"JJ","lemma":"extra","CharacterOffsetBegin":753.0,"NER":"O"},{"Speaker":"PER0","POS":"NN","lemma":"meat","CharacterOffsetBegin":759.0,"NER":"O","id":4.0,"word":"meat","CharacterOffsetEnd":763.0},{"CharacterOffsetEnd":764.0,"Speaker":"PER0","POS":".","lemma":".","CharacterOffsetBegin":763.0,"NER":"O","id":5.0,"word":"."}]}

이 문제를 해결하는 영리한 방법이 있습니까? 너무 많은 try / catch 또는 if / else 처리없이 스트림에서 개체를 처리 할 수 ​​있도록 개체를 배열에 효과적으로 강제 할 수있는 방법이 있습니까?

에고 르 넬리 우바
static JsonArray bruteForceJsonArray(JsonObject object, String key) {
    if (object.get(key).isJsonArray()) {
        return object.get(key).getAsJsonArray();
    } else {
        JsonArray oneElementArray = new JsonArray();
        oneElementArray.add(new JsonObject());
        return oneElementArray;
    }
}

그러나 JsonObject/ JsonArray직접 작업해서는 안됩니다 . 데이터에 대한 POJO 클래스를 만들고 Gson을 사용하여 JSON을 역 직렬화합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Gson- JSON 객체의 JSON 배열을 ArrayList <org.json.JSONObject>로 구문 분석

분류에서Dev

GSON WHen 객체를 사용하여 JSON을 구문 분석하는 방법은 JSONObject 또는 JSONArray입니다.

분류에서Dev

Android는 gson이 사용자 정의 객체로 구문 분석 한 json 배열을 얻습니다.

분류에서Dev

GSON은 배열 배열을 객체의 Java 배열로 구문 분석합니다.

분류에서Dev

GSON으로 여러 중첩 JSON 객체 / 배열을 구문 분석하는 방법은 무엇입니까?

분류에서Dev

android, gson은 json 문자열을 java 객체로 구문 분석 할 수 없습니다.

분류에서Dev

Java GSON이 객체 배열로 구문 분석하지 못했습니다.

분류에서Dev

GSON이 대신 객체 배열을 문자열 배열로 변환하는 이유는 무엇입니까?

분류에서Dev

JSON은 PHP에서 Javascript로 배열 또는 객체 대신 문자열을 전달합니다.

분류에서Dev

해당 객체의 마지막 값으로 이어지는 여러 json 객체 값을 구문 분석합니다.

분류에서Dev

파이썬의 객체에서 Json 배열 구문 분석

분류에서Dev

gson으로 이름을 알 수없는 json 객체 구문 분석

분류에서Dev

Python은 IANA 시간대 정보로 datetime 문자열을 구문 분석하고이를 datetime 객체로 변환합니다.

분류에서Dev

Android에서 json 객체 제목없이 json 배열을 구문 분석하는 방법은 무엇입니까?

분류에서Dev

Jackson이 Json 객체를 기본 문자열로 구문 분석하도록합니다.

분류에서Dev

신속하게 json 객체 만들기 : 한 줄의 연속 명령문은 ';'로 구분해야합니다.

분류에서Dev

JSON을 객체로 구문 분석

분류에서Dev

JSON을 Java 객체로 구문 분석

분류에서Dev

Gson은 JSON에서 하나의 객체 만 올바르게 구문 분석합니까?

분류에서Dev

Android : 객체 배열의 JSON 배열을 구문 분석하는 방법

분류에서Dev

다른 DTO 객체에 객체 노드의 JSON 배열을 구문 분석하는 방법

분류에서Dev

객체의 JSON 배열 구문 분석 : 정의되지 않은 속성

분류에서Dev

전체 json이 배열 일 때 jsonobject 구문 분석?

분류에서Dev

복잡한 jsonarray 및 Json 객체를 포함하는 JSON을 구문 분석 할 수 없습니다.

분류에서Dev

swifty json 구문 분석 배열 객체

분류에서Dev

Json 배열 및 객체 구문 분석

분류에서Dev

이 Javascript 객체 구문은 무엇을 의미합니까? 키 (문자열)와 값 (객체)이 있습니다.

분류에서Dev

이 json 예제가 객체가 배열로 구문 분석되는 이유

분류에서Dev

JSON은 속성으로 객체 배열을 문자열 화합니다.

Related 관련 기사

  1. 1

    Gson- JSON 객체의 JSON 배열을 ArrayList <org.json.JSONObject>로 구문 분석

  2. 2

    GSON WHen 객체를 사용하여 JSON을 구문 분석하는 방법은 JSONObject 또는 JSONArray입니다.

  3. 3

    Android는 gson이 사용자 정의 객체로 구문 분석 한 json 배열을 얻습니다.

  4. 4

    GSON은 배열 배열을 객체의 Java 배열로 구문 분석합니다.

  5. 5

    GSON으로 여러 중첩 JSON 객체 / 배열을 구문 분석하는 방법은 무엇입니까?

  6. 6

    android, gson은 json 문자열을 java 객체로 구문 분석 할 수 없습니다.

  7. 7

    Java GSON이 객체 배열로 구문 분석하지 못했습니다.

  8. 8

    GSON이 대신 객체 배열을 문자열 배열로 변환하는 이유는 무엇입니까?

  9. 9

    JSON은 PHP에서 Javascript로 배열 또는 객체 대신 문자열을 전달합니다.

  10. 10

    해당 객체의 마지막 값으로 이어지는 여러 json 객체 값을 구문 분석합니다.

  11. 11

    파이썬의 객체에서 Json 배열 구문 분석

  12. 12

    gson으로 이름을 알 수없는 json 객체 구문 분석

  13. 13

    Python은 IANA 시간대 정보로 datetime 문자열을 구문 분석하고이를 datetime 객체로 변환합니다.

  14. 14

    Android에서 json 객체 제목없이 json 배열을 구문 분석하는 방법은 무엇입니까?

  15. 15

    Jackson이 Json 객체를 기본 문자열로 구문 분석하도록합니다.

  16. 16

    신속하게 json 객체 만들기 : 한 줄의 연속 명령문은 ';'로 구분해야합니다.

  17. 17

    JSON을 객체로 구문 분석

  18. 18

    JSON을 Java 객체로 구문 분석

  19. 19

    Gson은 JSON에서 하나의 객체 만 올바르게 구문 분석합니까?

  20. 20

    Android : 객체 배열의 JSON 배열을 구문 분석하는 방법

  21. 21

    다른 DTO 객체에 객체 노드의 JSON 배열을 구문 분석하는 방법

  22. 22

    객체의 JSON 배열 구문 분석 : 정의되지 않은 속성

  23. 23

    전체 json이 배열 일 때 jsonobject 구문 분석?

  24. 24

    복잡한 jsonarray 및 Json 객체를 포함하는 JSON을 구문 분석 할 수 없습니다.

  25. 25

    swifty json 구문 분석 배열 객체

  26. 26

    Json 배열 및 객체 구문 분석

  27. 27

    이 Javascript 객체 구문은 무엇을 의미합니까? 키 (문자열)와 값 (객체)이 있습니다.

  28. 28

    이 json 예제가 객체가 배열로 구문 분석되는 이유

  29. 29

    JSON은 속성으로 객체 배열을 문자열 화합니다.

뜨겁다태그

보관