Как мне предоставить следующий вывод JSON с помощью Java - PullRequest
2 голосов
/ 27 октября 2010

Я пытаюсь сгенерировать следующий вывод json, используя библиотеки java net.sf.json, но безуспешно.

[{"data": [[1, 1, "Text"], [2, 2, "Text"], [3, 0, "Text"], [5, 2, "Text""]]," label ":" Первая серия "}]

Я читал на этих форумах: Gson - моя лучшая ставка на будущее.Кто-нибудь может привести пример того, как сгенерировать этот json-файл с помощью Gson или другой подходящей библиотеки на основе java.

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 27 октября 2010

мне нравится это http://www.json.org/javadoc/org/json/JSONObject.html от http://json.org/java/

и JSONArray.

с этими двумя объектами:

JSONArray inner = new JSONArray()
inner.add(1);inner.add("text");
JSONObject outer = new JSONObject();
outer.put("data",inner);
outer.put("label", "stuff");

String out = outer.toString()
2 голосов
/ 27 октября 2010

Это достаточно просто, используя такой объект Java:

public class GsonTest {
  private List<DataItem> data;
  private String label;

  public GsonTest() {} // for Gson

  public GsonTest(List<DataItem> data, String label) {
    this.data = data;
    this.label = label;
  }
  // ...
}

public class DataItem {
  private int val1;
  private int val2;
  private String text;

  public DataItem() {} // for Gson

  public DataItem(int val1, int val2, String text) {
    this.val1 = val1;
    this.val2 = val2;
    this.text = text;
  }
  // ...
}

Поскольку в вашем формате JSON для каждого элемента данных используется массив, а не объект (объект будет иметь больше смысла на основе вашего образца), вам необходимо добавить собственный обработчик для сериализации и десериализации DataItem с массивами JSON и из них .

public class DataItemConverter implements JsonDeserializer<DataItem>,
    JsonSerializer<DataItem> {

  public DataItem deserialize(JsonElement json, Type typeOfT, 
      JsonDeserializationContext context) throws JsonParseException {
    JsonArray array = json.getAsJsonArray();
    int val1 = array.get(0).getAsInt();
    int val2 = array.get(1).getAsInt();
    String text = array.get(2).getAsString();
    return new DataItem(val1, val2, text);
  }

  public JsonElement serialize(DataItem src, Type typeOfSrc, 
      JsonSerializationContext context) {
    JsonArray array = new JsonArray();
    array.add(new JsonPrimitive(src.val1));
    array.add(new JsonPrimitive(src.val2));
    array.add(new JsonPrimitive(src.text));
    return array;
  }
}

Тогда вам просто нужно зарегистрировать этот конвертер при создании экземпляра Gson, и все готово! Поскольку наш DataItem конвертер также выполняет десериализацию, вы также сможете десериализовать сгенерированный JSON как List<GsonTest>.

public static void testSerialization() {
  List<DataItem> data = new ArrayList<DataItem>();
  data.add(new DataItem(1, 1, "Text"));
  data.add(new DataItem(2, 2, "Text"));
  data.add(new DataItem(3, 0, "Text"));
  data.add(new DataItem(5, 2, "Text"));

  GsonTest test = new GsonTest(data, "First Series");
  List<GsonTest> list = new ArrayList<GsonTest>();
  list.add(test);
  Gson gson = new GsonBuilder()
      .registerTypeAdapter(DataItem.class, new DataItemConverter())
      .create();
  System.out.println(gson.toJson(list));
}
2 голосов
/ 27 октября 2010

Gson

Gson - это библиотека Java, которую можно использовать для преобразования объектов Java в представление JSON.Его также можно использовать для преобразования строки JSON в эквивалентный объект Java.Gson может работать с произвольными объектами Java, включая уже существующие объекты, исходный код которых у вас отсутствует.

Существует несколько проектов с открытым исходным кодом, которые могут преобразовывать объекты Java в JSON.Однако большинство из них требуют, чтобы вы размещали аннотации Java в ваших классах, что вы не можете сделать, если у вас нет доступа к исходному коду.Большинство также не полностью поддерживает использование Java Generics.Гсон рассматривает оба из них как очень важные цели дизайна.

import com.google.gson.Gson;

class Person {
  private int age = 10;
  private String name = "jigar";
}

Person obj = new Person();
Gson gson = new Gson();
String json = gson.toJson(obj);

http://json.org/java/

import org.json.JSONObject;

...
...

JSONObject json = new JSONObject();
json.put("city", "Mumbai");
json.put("country", "India");

...

String output = json.toString();  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...