String 변수가 있습니다 jsonString
.
{"phonetype":"N95","cat":"WP"}
이제 JSON 객체로 변환하고 싶습니다. Google에서 더 많이 검색했지만 예상 답변을 얻지 못했습니다 ...
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());
}
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
여전히 답을 찾는 사람에게 :
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
import org.json.simple.JSONObject
parser.parse(
이며 try-catch 또는 throw를 원합니다. 그러나 하나를 추가하면 Maven depedencies에 json-simple이 있고 프로젝트 라이브러리에 명확하게 표시되는 경우에도 Unhandled exception type ParseException
ParseException에 대해 오류 또는 NoClassDefFound 오류가 발생합니다 org.json.simple.parser
.
사용할 수 있습니다 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"}
자원:
JSON 홈페이지 에서 링크 된 다양한 Java JSON 시리얼 라이저 및 디시리얼라이저가 있습니다 .
이 글을 쓰는 시점에서 다음 22 가지가 있습니다.
- JSON-자바 .
- JSONUtil .
- jsonp .
- JSON-lib 디렉토리 .
- Stringtree .
- 소조 .
- json-taglib .
- Flexjson .
- 아르고 .
- jsonij .
- fastjson .
- mjson .
- jjson .
- json-simple .
- json-io .
- 구글 - GSON .
- 포스 노바 JSON .
- 옥수수 변환기 .
- 아파치 johnzon .
- Genson .
- cookjson .
- progbase .
물론 목록은 바뀔 수 있습니다.
자바 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를 사용하십시오.
Jackson
with를 사용하여 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으로 변환하고 찌르는 것은 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(
코드 하우스 잭슨 -2012 년부터 RESTful 웹 서비스 및 JUnit 테스트에서이 멋진 API를 사용하고 있습니다. API를 사용하면 다음을 수행 할 수 있습니다.
(1) JSON 문자열을 Java Bean으로 변환
public static String beanToJSONString(Object myJavaBean) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.writeValueAsString(myJavaBean);
}
(2) JSON 문자열을 JSON 객체로 변환 (JsonNode)
public static JsonNode stringToJSONObject(String jsonString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readTree(jsonString);
}
//Example:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JsonNode jsonNode = stringToJSONObject(jsonString);
Assert.assertEquals("Phonetype value not legit!", "N95", jsonNode.get("phonetype").getTextValue());
Assert.assertEquals("Cat value is tragic!", "WP", jsonNode.get("cat").getTextValue());
(3) Java Bean을 JSON 문자열로 변환
public static Object JSONStringToBean(Class myBeanClass, String JSONString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readValue(JSONString, beanClass);
}
REFS :
JsonNode API -JsonNode 객체의 값을 사용, 탐색, 구문 분석 및 평가하는 방법
학습서 -Jackson을 사용하여 JSON 문자열을 JsonNode로 변환하는 간단한 학습서
인터페이스를 직렬화 해제하는 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은 다소 번거 롭습니다. 그러나 InstanceCreator
GSON에 필요한 쓰기 는 필요 하지 않습니다 .
사용 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"));
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
org.json.simple.JSONObject를 사용하여 문자열을 Json Object로 변환
private static JSONObject createJSONObject(String jsonString){
JSONObject jsonObject=new JSONObject();
JSONParser jsonParser=new JSONParser();
if ((jsonString != null) && !(jsonString.isEmpty())) {
try {
jsonObject=(JSONObject) jsonParser.parse(jsonString);
} catch (org.json.simple.parser.ParseException e) {
e.printStackTrace();
}
}
return jsonObject;
}
더 나은 org.json
lib 를 사용하여 더 간단한 방법으로 이동하십시오 . 다음과 같이 매우 간단한 접근법을 수행하십시오.
JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");
이제 각 String obj
의 변환 된 JSONObject
형식입니다. 이름-값 쌍이있는 경우에 해당됩니다.
문자열의 경우의 생성자로 직접 전달할 수 있습니다 JSONObject
. 유효한 json String
경우에는 예외가 발생합니다.
user.put("email", "someemail@mail.com")
처리 : 처리되지 않은 예외가 발생합니다.
try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}