Programing

Java에서 jsonString을 JSONObject로 변환하는 방법

lottogame 2020. 2. 26. 07:38
반응형

Java에서 jsonString을 JSONObject로 변환하는 방법


String 변수가 있습니다 jsonString.

{"phonetype":"N95","cat":"WP"}

이제 JSON 객체로 변환하고 싶습니다. Google에서 더 많이 검색했지만 예상 답변을 얻지 못했습니다 ...


org.json 라이브러리 사용하기 :

try {
     JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
     Log.d("Error", err.toString());
}

여전히 답을 찾는 사람에게 :

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);

사용할 수 있습니다 google-gson. 세부:

객체 예

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}

(직렬화)

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 
==> json is {"value1":1,"value2":"abc"}

순환 참조를 사용하여 객체를 직렬화 할 수 없으므로 무한 재귀가 발생합니다.

(직렬화 해제)

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);  
==> obj2 is just like obj

Gson의 또 다른 예 :

Gson은 배우고 구현하기 쉬우므로 다음 두 가지 방법을 알아야합니다.

-> toJson () – Java 객체를 JSON 형식으로 변환

-> fromJson () – JSON을 자바 객체로 변환

import com.google.gson.Gson;

public class TestObjectToJson {
  private int data1 = 100;
  private String data2 = "hello";

  public static void main(String[] args) {
      TestObjectToJson obj = new TestObjectToJson();
      Gson gson = new Gson();

      //convert java object to JSON format
      String json = gson.toJson(obj);

      System.out.println(json);
  }

}

산출

{"data1":100,"data2":"hello"}

자원:

Google Gson 프로젝트 홈페이지

Gson 사용자 안내서


JSON 홈페이지 에서 링크 된 다양한 Java JSON 시리얼 라이저 및 디시리얼라이저가 있습니다 .

이 글을 쓰는 시점에서 다음 22가 있습니다

물론 목록은 바뀔 수 있습니다.


자바 7 솔루션

import javax.json.*;

...

String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()

;


나는 이것을 위해 google-gson을 사용하고 싶습니다. 정확하게 JSONObject로 작업 할 필요가 없기 때문입니다.

이 경우 JSON 객체의 속성에 해당하는 클래스가 있습니다.

class Phone {
 public String phonetype;
 public String cat;
}


...
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
Gson gson = new Gson();
Phone fooFromJson = gson.fromJson(jsonString, Phone.class);
...

그러나 귀하의 질문은 JSON 문자열의 실제 JSONObject 객체로 어떻게 끝나는가와 비슷하다고 생각합니다.

나는 google-json api를보고 있었고 org.json의 api와 같은 것을 찾을 수 없었습니다. 이것은 아마도 JSONObject를 사용해야 할 때 사용하고 싶을 것입니다.

http://www.json.org/javadoc/org/json/JSONObject.html

org.json.JSONObject (완전히 다른 API)를 사용하여 다음과 같은 작업을 수행하려는 경우 ...

JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));

google-gson의 장점은 JSONObject를 처리 할 필요가 없다는 것입니다. json을 가져 와서 직렬화 해제하려는 클래스를 전달하면 클래스 속성이 JSON과 일치하지만 다시 모든 사람에게 고유 한 요구 사항이 있습니다. 아마도 사전 매핑 된 클래스를 가질 수있는 사치를 감당할 수 없습니다. JSON 생성 측면에서 일이 너무 동적 일 수 있으므로 역 직렬화 측면 이 경우 json.org를 사용하십시오.


변환하려면 StringJSONObject그냥 통과해야 String의 생성자로 인스턴스를 JSONObject.

예 :

JSONObject jsonObj = new JSONObject("your string");

org.json을 가져와야합니다.

JSONObject jsonObj = null;
        try {
            jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
        } catch (JSONException e) {
            e.printStackTrace();
        }

Jacksonwith를 사용하여 문자열을 JSON 으로 com.fasterxml.jackson.databind:

json-string이 다음과 같다고 가정하면 : jsonString = { "phonetype": "N95", "cat": "WP"}

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
 * Simple code exmpl
 */
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString);
String phoneType = node.get("phonetype").asText();
String cat = node.get("cat").asText();

http://json-lib.sourceforge.net (net.sf.json.JSONObject)을 사용중인 경우

꽤 쉽습니다.

String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);

또는

JSONObject json = JSONSerializer.toJSON(myJsonString);

json.getString (param), json.getInt (param) 등으로 값을 가져옵니다.


일반 Json 구문 분석에 fasterxml의 JsonNode를 사용하십시오. 내부적으로 모든 입력에 대한 키 값의 맵을 작성합니다.

예:

private void test(@RequestBody JsonNode node)

입력 문자열 :

{"a":"b","c":"d"}

문자열을 json으로 변환하고 찌르는 것은 json과 같습니다. { "phonetype": "N95", "cat": "WP"}

String Data=response.getEntity().getText().toString(); // reading the string value 
JSONObject json = (JSONObject) new JSONParser().parse(Data);
String x=(String) json.get("phonetype");
System.out.println("Check Data"+x);
String y=(String) json.get("cat");
System.out.println("Check Data"+y);

외부 라이브러리를 사용할 필요가 없습니다.

대신이 클래스를 사용할 수 있습니다 :) (list, nested list 및 json 처리)

public class Utility {

    public static Map<String, Object> jsonToMap(Object json) throws JSONException {

        if(json instanceof JSONObject)
            return _jsonToMap_((JSONObject)json) ;

        else if (json instanceof String)
        {
            JSONObject jsonObject = new JSONObject((String)json) ;
            return _jsonToMap_(jsonObject) ;
        }
        return null ;
    }


   private static Map<String, Object> _jsonToMap_(JSONObject json) throws JSONException {
        Map<String, Object> retMap = new HashMap<String, Object>();

        if(json != JSONObject.NULL) {
            retMap = toMap(json);
        }
        return retMap;
    }


    private static Map<String, Object> toMap(JSONObject object) throws JSONException {
        Map<String, Object> map = new HashMap<String, Object>();

        Iterator<String> keysItr = object.keys();
        while(keysItr.hasNext()) {
            String key = keysItr.next();
            Object value = object.get(key);

            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            map.put(key, value);
        }
        return map;
    }


    public static List<Object> toList(JSONArray array) throws JSONException {
        List<Object> list = new ArrayList<Object>();
        for(int i = 0; i < array.length(); i++) {
            Object value = array.get(i);
            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            list.add(value);
        }
        return list;
    }
}

JSON 문자열을 해시 맵으로 변환하려면 다음 사용하십시오.

HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(

json 단일 객체를 목록으로 설정하려면

"locations":{

}

~에 List<Location>

사용하다

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

jackson.mapper-asl-1.9.7.jar


인터페이스를 직렬화 해제하는 GSON은 다음과 같은 예외가 발생합니다.

"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."

역 직렬화하는 동안; GSON은 해당 인터페이스에 어떤 개체를 초기화해야하는지 모릅니다.

이것은 어떻게 든 여기서 해결 됩니다 .

그러나 FlexJSON 에는이 솔루션이 본질적으로 있습니다. 직렬화하는 동안 아래와 같이 json의 일부로 클래스 이름을 추가합니다.

{
    "HTTPStatus": "OK",
    "class": "com.XXX.YYY.HTTPViewResponse",
    "code": null,
    "outputContext": {
        "class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
        "eligible": true
    }
}

따라서 JSON은 다소 번거 롭습니다. 그러나 InstanceCreatorGSON에 필요한 쓰기 는 필요 하지 않습니다 .


org.json 사용

JSON 형식 텍스트를 포함하는 문자열이있는 경우 다음 단계에 따라 JSON 오브젝트를 얻을 수 있습니다.

String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
    try {
        jsonObj = new JSONObject(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }

전화 유형에 액세스하려면

Sysout.out.println(jsonObject.getString("phonetype"));

더 나은 org.jsonlib 를 사용하여 더 간단한 방법으로 이동하십시오 . 다음과 같이 매우 간단한 접근법을 수행하십시오.

JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");

이제 각 String obj의 변환 된 JSONObject형식입니다. 이름-값 쌍이있는 경우에 해당합니다.

문자열의 경우의 생성자로 직접 전달할 수 있습니다 JSONObject. 유효한 json String경우에는 예외가 발생합니다.

참고 URL : https://stackoverflow.com/questions/5245840/how-to-convert-jsonstring-to-jsonobject-in-java



반응형