2

java net.sf.json libsを使用して次のjson出力を生成しようとしていますが、失敗しました。

[{"data":[[1、1、 "Text"]、[2、2、 "Text"]、[3、0、 "Text"]、[5、2、 "Text"]]、 "label ":"最初のシリーズ "}]

私はこれらのフォーラムで読んだことがあります。Gsonは今後の最善の策です。誰かがGsonまたは別の適切なJavaベースのライブラリを使用してこのjsonを生成する方法の例を提供できますか?

前もって感謝します

4

3 に答える 3

2

Gson

Gsonは、JavaオブジェクトをJSON表現に変換するために使用できるJavaライブラリです。JSON文字列を同等のJavaオブジェクトに変換するためにも使用できます。Gsonは、ソースコードがない既存のオブジェクトを含む任意のJavaオブジェクトを処理できます。

JavaオブジェクトをJSONに変換できるオープンソースプロジェクトがいくつかあります。ただし、それらのほとんどでは、ソースコードにアクセスできない場合はできないことをクラスにJavaアノテーションを配置する必要があります。また、ほとんどの場合、JavaGenericsの使用を完全にはサポートしていません。Gsonは、これらの両方を非常に重要な設計目標と見なしています。

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();  
于 2010-10-27T16:07:00.130 に答える
2

http://json.org/java/のこの http://www.json.org/javadoc/org/json/JSONObject.htmlが好きです

およびJSONArray。

これらの2つのオブジェクトで:

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()
于 2010-10-27T16:07:54.840 に答える
2

これは、次のような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配列との間でsをシリアル化および逆シリアル化するためのカスタムハンドラーを追加する必要があります。

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));
}
于 2010-10-27T16:26:51.023 に答える