Получение функции JSONObject и Google Gson в одной библиотеке - PullRequest
1 голос
/ 10 октября 2010

Мне было интересно, есть ли какая-нибудь библиотека JSON, которая позволяет мне

  1. Получить карту ключ-значение из строки JSON ( JSONObject способен сделать это)
  2. Получить объект Java из строки JSON ( Google Gson способен сделать это)

Следующие оба вывести value

package jsontest;

import com.google.gson.Gson;
import org.json.JSONException;
import org.json.JSONObject;

/**
 *
 * @author yccheok
 */
public class Main {

    public static class Me {
        public String key;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws JSONException {

        final String s = "{\"key\" : \"value\"}";

        // Feature 1
        final JSONObject jsonObject = new JSONObject("{\"key\" : \"value\"}");
        System.out.println(jsonObject.getString("key"));

        // Feature 2
        Gson gson = new Gson();
        Me me = gson.fromJson(s, Me.class);
        System.out.println(me.key);
    }
}

В настоящее время мне нужно использовать 2 разные библиотеки для выполнения вышеуказанной задачи, связанной с JSON.Есть ли библиотеки, которые могут выполнять обе задачи?

Ответы [ 2 ]

4 голосов
/ 10 октября 2010

Вы можете использовать Джексон .

Имеет решение для привязки данных (например, Gson) и представление модели дерева (например, JSONObject)

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;

import java.io.IOException;

public class Main {

    public static class Me {
        public String key;
    }

    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        String json = "{\"key\" : \"value\"}";

        // Feature 1
        JsonNode rootNode = mapper.readValue(json, JsonNode.class);
        System.out.println(rootNode.get("key").getTextValue());

        // Feature 2
        Me value = mapper.readValue(json, Me.class);
        System.out.println(value.key);
    }
}
3 голосов
/ 11 октября 2010

Я не знаю, как я пропустил это в первый раз, но вы можете сделать это в Gson, используя JsonParser:

 JsonParser parser = new JsonParser();
 JsonElement rootElement = parser.parse(reader);

Предыдущий ответ (нет необходимостисделать это)

Я не уверен, что у Gson есть какой-то более простой способ сделать это, но, похоже, это работает:

public enum JsonElementDeserializer implements JsonDeserializer<JsonElement> {
  INSTANCE;

  public JsonElement deserialize(
      JsonElement json, Type typeOfT, JsonDeserializationContext context) 
      throws JsonParseException {
    return json;
  }
}

А потом:

Gson gson = new GsonBuilder().registerTypeAdapter(JsonElement.class,
    JsonElementDeserializer.INSTANCE).create();
JsonElement rootElement = gson.fromJson(reader, JsonElement.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...