다음 JSON 텍스트가 있습니다. 어떻게의 값을 얻기 위해 그것을 구문 분석 할 수있는 pageName
, pagePic
, post_id
, 등?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
답변
org.json의 라이브러리를 사용하기 쉽습니다. 아래 예제 코드 :
import org.json.*;
String jsonString = ... ; //assign your JSON String here
JSONObject obj = new JSONObject(jsonString);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");
JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++)
{
String post_id = arr.getJSONObject(i).getString("post_id");
......
}
Java에서 JSON 구문 분석 에서 더 많은 예제를 찾을 수 있습니다.
다운로드 가능한 jar : http://mvnrepository.com/artifact/org.json/json
답변
예를 위해서이 클래스가 있다고 가정 할 수 있습니다 Person
단지와를 name
.
private class Person {
public String name;
public Person(String name) {
this.name = name;
}
}
Google GSON ( 메이븐 )
객체의 JSON 직렬화 / 역 직렬화에 대한 개인적 선호.
Gson g = new Gson();
Person person = g.fromJson("{\"name\": \"John\"}", Person.class);
System.out.println(person.name); //John
System.out.println(g.toJson(person)); // {"name":"John"}
최신 정보
단일 속성을 얻으려면 Google 라이브러리에서도 쉽게 수행 할 수 있습니다.
JsonObject jsonObject = new JsonParser().parse("{\"name\": \"John\"}").getAsJsonObject();
System.out.println(jsonObject.get("name").getAsString()); //John
조직 JSON ( Maven )
객체 역 직렬화가 필요하지 않지만 단순히 속성을 얻으려면 org.json을 시도하십시오 ( 또는 위의 GSON 예를 보십시오 ! )
JSONObject obj = new JSONObject("{\"name\": \"John\"}");
System.out.println(obj.getString("name")); //John
잭슨 ( 메이븐 )
ObjectMapper mapper = new ObjectMapper();
Person user = mapper.readValue("{\"name\": \"John\"}", Person.class);
System.out.println(user.name); //John
답변
-
JSON에서 Java 객체를 생성하거나 그 반대의 경우 GSON 또는 JACKSON 타사 항아리 등을 사용하십시오.
//from object to JSON Gson gson = new Gson(); gson.toJson(yourObject); // from JSON to object yourObject o = gson.fromJson(JSONString,yourObject.class);
-
그러나 JSON 문자열을 구문 분석하고 일부 값을 얻으려면 (또는 JSON 문자열을 처음부터 작성하여 와이어를 통해 보내려면) JsonReader, JsonArray, JsonObject 등이 포함 된 JaveEE jar을 사용하십시오. javax.json과 같은 스펙. 이 두 항아리로 json을 구문 분석하고 값을 사용할 수 있습니다.
이러한 API는 실제로 XML의 DOM / SAX 구문 분석 모델을 따릅니다.
Response response = request.get(); // REST call JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class))); JsonArray jsonArray = jsonReader.readArray(); ListIterator l = jsonArray.listIterator(); while ( l.hasNext() ) { JsonObject j = (JsonObject)l.next(); JsonObject ciAttr = j.getJsonObject("ciAttributes");
답변
quick-json 파서 는 매우 간단하고 유연하며 매우 빠르고 사용자 정의가 가능합니다. 시도 해봐
풍모:
- JSON 사양 준수 (RFC4627)
- 고성능 JSON 파서
- 유연하고 구성 가능한 구문 분석 방식 지원
- 모든 JSON 계층의 키 / 값 쌍에 대한 구성 가능한 검증
- 사용하기 쉬운 # 매우 작은 설치 공간
- 개발자 친화적이고 예외 추적이 용이
- 플러그 형 사용자 정의 유효성 검사 지원-발생시 및 사용자 정의 유효성 검사기를 구성하여 키 / 값을 확인할 수 있습니다.
- 유효성 검사 및 유효성 검사가 아닌 파서 지원
- quick-JSON 유효성 검증 파서를 사용하기위한 두 가지 유형의 구성 (JSON / XML) 지원
- JDK 1.5 필요
- 외부 라이브러리에 의존하지 않습니다
- 객체 직렬화를 통한 JSON 생성 지원
- 파싱 과정에서 수집 유형 선택 지원
다음과 같이 사용할 수 있습니다 :
JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);
답변
Google Gson을 사용할 수 있습니다 .
이 라이브러리를 사용하면 동일한 JSON 구조로 모델 만 작성하면됩니다. 그런 다음 모델이 자동으로 채워집니다. 변수를 JSON 키로 호출하거나 @SerializedName
다른 이름을 사용하려는 경우 사용해야합니다.
JSON
귀하의 예에서 :
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
}
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
모델
class MyModel {
private PageInfo pageInfo;
private ArrayList<Post> posts = new ArrayList<>();
}
class PageInfo {
private String pageName;
private String pagePic;
}
class Post {
private String post_id;
@SerializedName("actor_id") // <- example SerializedName
private String actorId;
private String picOfPersonWhoPosted;
private String nameOfPersonWhoPosted;
private String message;
private String likesCount;
private ArrayList<String> comments;
private String timeOfPost;
}
파싱
이제 Gson 라이브러리를 사용하여 구문 분석 할 수 있습니다.
MyModel model = gson.fromJson(jsonString, MyModel.class);
Gradle 가져 오기
앱 Gradle 파일에서 라이브러리를 가져와야 함
implementation 'com.google.code.gson:gson:2.8.6' // or earlier versions
자동 모델 생성
JSON은 자동으로 같은 온라인 도구를 사용하는 당신은 모델을 생성 할 수 있습니다 이 .
답변
주어진 거의 모든 답변은 관심있는 속성의 값에 액세스하기 전에 JSON을 Java 객체로 완전히 직렬화 해제해야합니다. 이 경로를 따르지 않는 또 다른 대안 은 JSON의 XPath와 같은 JsonPATH 를 사용 하고 JSON 객체를 통과 할 수 있도록하는 것입니다.
JayWay의 사양이며 좋은 사람들은 사양에 대한 Java 구현을 만들었습니다. https://github.com/jayway/JsonPath
기본적으로 사용하려면 프로젝트에 다음과 같이 추가하십시오.
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>${version}</version>
</dependency>
그리고 사용 :
String pageName = JsonPath.read(yourJsonString, "$.pageInfo.pageName");
String pagePic = JsonPath.read(yourJsonString, "$.pageInfo.pagePic");
String post_id = JsonPath.read(yourJsonString, "$.pagePosts[0].post_id");
기타…
JSON을 가로 지르는 다른 방법에 대한 자세한 정보는 JsonPath 스펙 페이지를 확인하십시오.
답변
A-설명
Jackson String을 사용하여 JSON String을 POJO ( Plain Old Java Object ) 인스턴스 에 바인딩 할 수 있습니다 . POJO는 단순히 개인 필드와 공용 getter / setter 메소드 만있는 클래스입니다. Jackson은 리플렉션을 사용하여 메소드를 탐색하고 클래스의 필드 이름이 JSON 오브젝트의 필드 이름에 맞게 JSON 오브젝트를 POJO 인스턴스에 맵핑합니다.
실제로 복합 객체 인 JSON 객체 에서 주 객체는 두 개의 하위 객체로 구성됩니다. 따라서 POJO 클래스는 동일한 계층 구조를 가져야합니다. 전체 JSON 객체를 Page 객체라고합니다. Page 개체는 PageInfo 개체와 Post 개체 배열로 구성됩니다.
따라서 우리는 세 가지 POJO 클래스를 만들어야합니다.
- 페이지 클래스하는 복합 PageInfo 의 클래스와 배열 포스트 인스턴스
- PageInfo 클래스
- 게시물 클래스
내가 사용한 유일한 패키지는 Jackson ObjectMapper입니다. 우리가하는 일은 데이터 바인딩입니다.
com.fasterxml.jackson.databind.ObjectMapper
필수 종속성 인 jar 파일은 다음과 같습니다.
- jackson-core-2.5.1.jar
- jackson-databind-2.5.1.jar
- jackson-annotations-2.5.0.jar
필요한 코드는 다음과 같습니다.
B-주요 POJO 클래스 : 페이지
package com.levo.jsonex.model;
public class Page {
private PageInfo pageInfo;
private Post[] posts;
public PageInfo getPageInfo() {
return pageInfo;
}
public void setPageInfo(PageInfo pageInfo) {
this.pageInfo = pageInfo;
}
public Post[] getPosts() {
return posts;
}
public void setPosts(Post[] posts) {
this.posts = posts;
}
}
C-자식 POJO 클래스 : PageInfo
package com.levo.jsonex.model;
public class PageInfo {
private String pageName;
private String pagePic;
public String getPageName() {
return pageName;
}
public void setPageName(String pageName) {
this.pageName = pageName;
}
public String getPagePic() {
return pagePic;
}
public void setPagePic(String pagePic) {
this.pagePic = pagePic;
}
}
D-아동 POJO 수업 : Post
package com.levo.jsonex.model;
public class Post {
private String post_id;
private String actor_id;
private String picOfPersonWhoPosted;
private String nameOfPersonWhoPosted;
private String message;
private int likesCount;
private String[] comments;
private int timeOfPost;
public String getPost_id() {
return post_id;
}
public void setPost_id(String post_id) {
this.post_id = post_id;
}
public String getActor_id() {
return actor_id;
}
public void setActor_id(String actor_id) {
this.actor_id = actor_id;
}
public String getPicOfPersonWhoPosted() {
return picOfPersonWhoPosted;
}
public void setPicOfPersonWhoPosted(String picOfPersonWhoPosted) {
this.picOfPersonWhoPosted = picOfPersonWhoPosted;
}
public String getNameOfPersonWhoPosted() {
return nameOfPersonWhoPosted;
}
public void setNameOfPersonWhoPosted(String nameOfPersonWhoPosted) {
this.nameOfPersonWhoPosted = nameOfPersonWhoPosted;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getLikesCount() {
return likesCount;
}
public void setLikesCount(int likesCount) {
this.likesCount = likesCount;
}
public String[] getComments() {
return comments;
}
public void setComments(String[] comments) {
this.comments = comments;
}
public int getTimeOfPost() {
return timeOfPost;
}
public void setTimeOfPost(int timeOfPost) {
this.timeOfPost = timeOfPost;
}
}
E-샘플 JSON 파일 : sampleJSONFile.json
방금 JSON 샘플을이 파일로 복사하여 프로젝트 폴더에 넣었습니다.
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
F-데모 코드
package com.levo.jsonex;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.levo.jsonex.model.Page;
import com.levo.jsonex.model.PageInfo;
import com.levo.jsonex.model.Post;
public class JSONDemo {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
try {
Page page = objectMapper.readValue(new File("sampleJSONFile.json"), Page.class);
printParsedObject(page);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void printParsedObject(Page page) {
printPageInfo(page.getPageInfo());
System.out.println();
printPosts(page.getPosts());
}
private static void printPageInfo(PageInfo pageInfo) {
System.out.println("Page Info;");
System.out.println("**********");
System.out.println("\tPage Name : " + pageInfo.getPageName());
System.out.println("\tPage Pic : " + pageInfo.getPagePic());
}
private static void printPosts(Post[] posts) {
System.out.println("Page Posts;");
System.out.println("**********");
for(Post post : posts) {
printPost(post);
}
}
private static void printPost(Post post) {
System.out.println("\tPost Id : " + post.getPost_id());
System.out.println("\tActor Id : " + post.getActor_id());
System.out.println("\tPic Of Person Who Posted : " + post.getPicOfPersonWhoPosted());
System.out.println("\tName Of Person Who Posted : " + post.getNameOfPersonWhoPosted());
System.out.println("\tMessage : " + post.getMessage());
System.out.println("\tLikes Count : " + post.getLikesCount());
System.out.println("\tComments : " + Arrays.toString(post.getComments()));
System.out.println("\tTime Of Post : " + post.getTimeOfPost());
}
}
G-데모 출력
Page Info;
****(*****
Page Name : abc
Page Pic : http://example.com/content.jpg
Page Posts;
**********
Post Id : 123456789012_123456789012
Actor Id : 1234567890
Pic Of Person Who Posted : http://example.com/photo.jpg
Name Of Person Who Posted : Jane Doe
Message : Sounds cool. Can't wait to see it!
Likes Count : 2
Comments : []
Time Of Post : 1234567890