[java] Java에서 해시 맵을 JSON 객체로 변환하는 방법

Java에서 해시 맵을 JSON 객체로 변환하거나 캐스트하고 JSON 객체를 다시 JSON 문자열로 변환하는 방법은 무엇입니까?



답변

당신이 사용할 수있는:

new JSONObject(map);

주의 : 이 기능은Map<String, String>!

설명서 http://stleary.github.io/JSON-java/index.html 에서 얻을 수있는 다른 기능


답변

Gson 을 사용하여 임의로 복잡한 객체를 직렬화 할 수도 있습니다.

사용 방법은 다음과 같습니다.

Gson gson = new Gson();
String json = gson.toJson(myObject); 

Gson컬렉션을 JSON배열 로 자동 변환 합니다. Gson은 개인 필드를 직렬화하고 임시 필드를 자동으로 무시합니다.


답변

json을 사용한 예제

Map<String, Object> data = new HashMap<String, Object>();
    data.put( "name", "Mars" );
    data.put( "age", 32 );
    data.put( "city", "NY" );
    JSONObject json = new JSONObject();
    json.putAll( data );
    System.out.printf( "JSON: %s", json.toString(2) );

산출::

JSON: {
  "age": 32,
  "name": "Mars",
  "city": "NY"
}

Google의 GSON을 사용해보십시오 .Google의 GSON은 Java 객체를 JSON 표현으로 변환하는 데 사용할 수있는 최고의 라이브러리입니다.

http://code.google.com/p/google-gson/


답변

다음과 같이 사용하여 변환 Map할 수 있습니다 .JSONJackson

Map<String,Object> map = new HashMap<>();
//You can convert any Object.
String[] value1 = new String[] { "value11", "value12", "value13" };
String[] value2 = new String[] { "value21", "value22", "value23" };
map.put("key1", value1);
map.put("key2", value2);
map.put("key3","string1");
map.put("key4","string2");

String json = new ObjectMapper().writeValueAsString(map);
System.out.println(json);

Maven 종속성 Jackson:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.5.3</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
    <scope>compile</scope>
</dependency>

JSONObject라이브러리 를 사용하는 경우 맵을 JSON다음과 같이 변환 할 수 있습니다 .

Map<String, Object> map = new HashMap<>();
// Convert a map having list of values.
String[] value1 = new String[] { "value11", "value12", "value13" };
String[] value2 = new String[] { "value21", "value22", "value23" };
map.put("key1", value1);
map.put("key2", value2);

JSONObject json = new JSONObject(map);
System.out.println(json);

Maven 종속성 JSONObject:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20140107</version>
</dependency>

이것이 도움이되기를 바랍니다. 행복한 코딩.


답변

제 경우에는 의존성을 원하지 않았습니다. Java 8을 사용하면 JSON을 다음과 같은 간단한 문자열로 얻을 수 있습니다.

Map<String, Object> map = new HashMap<>();
map.put("key", "value");
map.put("key2", "value2");
String json = "{"+map.entrySet().stream()
    .map(e -> "\""+ e.getKey() + "\"" + ":\"" + String.valueOf(e.getValue()) + "\"")
    .collect(Collectors.joining(", "))+"}";


답변

지도를 열거하고 키-값 쌍을 JSONObject에 추가하면됩니다.

방법 :

private JSONObject getJsonFromMap(Map<String, Object> map) throws JSONException {
    JSONObject jsonData = new JSONObject();
    for (String key : map.keySet()) {
        Object value = map.get(key);
        if (value instanceof Map<?, ?>) {
            value = getJsonFromMap((Map<String, Object>) value);
        }
        jsonData.put(key, value);
    }
    return jsonData;
}


답변

Underscore-java 라이브러리는 해시 맵 또는 배열 목록을 json으로 변환하거나 그 반대로 변환 할 수 있습니다.

import com.github.underscore.lodash.U;
import java.util.*;

public class Main {

    public static void main(String[] args) {

        Map<String, Object> map = new LinkedHashMap<>();
        map.put("1", "a");
        map.put("2", "b");

        System.out.println(U.toJson(map));
        // {
        //    "1": "a",
        //    "2": "b"
        // }
    }
}