카테고리 보관물: Java

Java

JSON 데이터를 Java 객체로 변환 ‘groups’: [{

Java 조치 메소드 내의 JSON 문자열에서 특성에 액세스 할 수 있기를 원합니다. 간단히 말하면 문자열을 사용할 수 있습니다 myJsonString = object.getJson(). 아래는 문자열이 어떻게 보이는지에 대한 예입니다.

{
    'title': 'ComputingandInformationsystems',
    'id': 1,
    'children': 'true',
    'groups': [{
        'title': 'LeveloneCIS',
        'id': 2,
        'children': 'true',
        'groups': [{
            'title': 'IntroToComputingandInternet',
            'id': 3,
            'children': 'false',
            'groups': []
        }]
    }]
}

이 문자열에는 모든 JSON 객체에 다른 JSON 객체의 배열이 포함됩니다. 의도 된 오브젝트가 다른 JSON 오브젝트를 포함하는 그룹 특성을 보유하는 ID 목록을 추출하는 것입니다. Google의 Gson을 잠재적 인 JSON 플러그인으로 보았습니다. 누구나이 JSON 문자열에서 Java를 생성하는 방법에 대한 지침을 제공 할 수 있습니까?



답변

Google의 Gson을 잠재적 인 JSON 플러그인으로 보았습니다. 누구나이 JSON 문자열에서 Java를 생성하는 방법에 대한 지침을 제공 할 수 있습니까?

Google Gson 은 제네릭 및 중첩 된 Bean을 지원합니다. []JSON의 배열을 나타내며 같은 자바 컬렉션에 매핑해야합니다 List아니면 그냥 일반 자바 배열입니다. {}JSON에서 객체를 나타내며 자바에 매핑해야 Map하거나 일부 자바 빈즈 클래스입니다.

여러 속성을 가진 JSON 객체가 있으며이 속성은 groups동일한 유형의 중첩 객체 배열을 나타냅니다. 이것은 Gson으로 다음과 같은 방식으로 구문 분석 할 수 있습니다.

package com.stackoverflow.q1688099;

import java.util.List;
import com.google.gson.Gson;

public class Test {

    public static void main(String... args) throws Exception {
        String json =
            "{"
                + "'title': 'Computing and Information systems',"
                + "'id' : 1,"
                + "'children' : 'true',"
                + "'groups' : [{"
                    + "'title' : 'Level one CIS',"
                    + "'id' : 2,"
                    + "'children' : 'true',"
                    + "'groups' : [{"
                        + "'title' : 'Intro To Computing and Internet',"
                        + "'id' : 3,"
                        + "'children': 'false',"
                        + "'groups':[]"
                    + "}]"
                + "}]"
            + "}";

        // Now do the magic.
        Data data = new Gson().fromJson(json, Data.class);

        // Show it.
        System.out.println(data);
    }

}

class Data {
    private String title;
    private Long id;
    private Boolean children;
    private List<Data> groups;

    public String getTitle() { return title; }
    public Long getId() { return id; }
    public Boolean getChildren() { return children; }
    public List<Data> getGroups() { return groups; }

    public void setTitle(String title) { this.title = title; }
    public void setId(Long id) { this.id = id; }
    public void setChildren(Boolean children) { this.children = children; }
    public void setGroups(List<Data> groups) { this.groups = groups; }

    public String toString() {
        return String.format("title:%s,id:%d,children:%s,groups:%s", title, id, children, groups);
    }
}

상당히 간단하지 않습니까? 적절한 JavaBean을 가지고 호출하십시오 Gson#fromJson().

또한보십시오:


답변

Gson의 Bwaaaaare! 그것은 아주 아주 좋은, 멋진,하지만 당신은 단순한 객체 이외의 다른 작업을 수행 할 두 번째는, 당신은 쉽게 (아닌 자신의 시리얼 구축을 시작해야 할 수있는 하드를).

또한 객체 배열이 있고 일부 JSON을 해당 객체 배열로 직렬화 해제하면 실제 유형은 손실됩니다! 전체 개체는 복사되지 않습니다! XStream을 사용하십시오. jsondriver를 사용하고 적절한 설정을 설정하면 추악한 유형이 실제 json으로 인코딩되어 아무것도 풀리지 않습니다. 진정한 직렬화를 위해 지불해야 할 작은 가격 (못생긴 json).

참고 잭슨은 이러한 문제를 해결하고, 빠른 GSON보다.


답변

이상하게도 지금까지 언급 한 유일한 JSON 프로세서는 GSON이었습니다.

더 좋은 선택은 다음과 같습니다.

  • Jackson ( Github )-강력한 데이터 바인딩 (JSON과 POJO 간), 스트리밍 (초고속), 트리 모델 (유형이없는 액세스에 편리함)
  • Flex-JSON- 고도로 구성 가능한 직렬화

편집 (2013 년 8 월) :

고려해야 할 사항 하나 더 :

  • Genson -Jackson과 유사한 기능으로 개발자가 쉽게 구성 할 수 있음

답변

또는 Jackson과 함께 :

String json = "...
ObjectMapper m = new ObjectMapper();
Set<Product> products = m.readValue(json, new TypeReference<Set<Product>>() {});


답변

변경으로 인해 이미 http://restfb.com/ 을 사용하는 응용 프로그램에있는 경우 다음을 수행 할 수 있습니다.

import com.restfb.json.JsonObject;

...

JsonObject json = new JsonObject(jsonString);
json.get("title");

기타


답변

변환 JSONObject하기 쉬운 Java 코드Java Object

Employee.java

import java.util.HashMap;
import java.util.Map;

import javax.annotation.Generated;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
"id",
"firstName",
"lastName"
})
public class Employee {

@JsonProperty("id")
private Integer id;
@JsonProperty("firstName")
private String firstName;
@JsonProperty("lastName")
private String lastName;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

/**
*
* @return
* The id
*/
@JsonProperty("id")
public Integer getId() {
return id;
}

/**
*
* @param id
* The id
*/
@JsonProperty("id")
public void setId(Integer id) {
this.id = id;
}

/**
*
* @return
* The firstName
*/
@JsonProperty("firstName")
public String getFirstName() {
return firstName;
}

/**
*
* @param firstName
* The firstName
*/
@JsonProperty("firstName")
public void setFirstName(String firstName) {
this.firstName = firstName;
}

/**
*
* @return
* The lastName
*/
@JsonProperty("lastName")
public String getLastName() {
return lastName;
}

/**
*
* @param lastName
* The lastName
*/
@JsonProperty("lastName")
public void setLastName(String lastName) {
this.lastName = lastName;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}

LoadFromJSON.java

import org.codehaus.jettison.json.JSONObject;

import com.fasterxml.jackson.databind.ObjectMapper;

public class LoadFromJSON {

    public static void main(String args[]) throws Exception {
        JSONObject json = new JSONObject();
        json.put("id", 2);
        json.put("firstName", "hello");
        json.put("lastName", "world");

        byte[] jsonData = json.toString().getBytes();

        ObjectMapper mapper = new ObjectMapper();
        Employee employee = mapper.readValue(jsonData, Employee.class);

        System.out.print(employee.getLastName());

    }
}


답변

HashMap keyArrayList = new HashMap();
Iterator itr = yourJson.keys();
while (itr.hasNext())
{
    String key = (String) itr.next();
    keyArrayList.put(key, yourJson.get(key).toString());
}