どのようにJavaでの私のJSONのよりよいを作るには?厳密に使用して - org.json.JSONを

ボブ :
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class testjson {

    public static void main(String args[]) throws JSONException {
        JSONObject json = new JSONObject();
        json.put("name", "timmy");
        json.put("age", "20");

        List<String> ids = new ArrayList<>(); 
        JSONObject jsonIds = new JSONObject();

        jsonIds.put("jobId", "123");
        jsonIds.put("houseId", "5");


        ids.add(jsonIds.toString(4));

        json.put("idList", ids);

        System.out.println(json.toString(4));

    }

}

私はこれをプリントアウトしたいです。その順序は重要ではありませんが、同様の配列を修正します。

{
    "age": "20",
    "name": "timmy",
    "idList": [
        {
            "houseId": "5", 
            "jobId": "123"
        }
    ]

}

現在、この出力

{
    "age": "20",
    "idList": ["{\n    \"houseId\": \"5\",\n    \"jobId\": \"123\"\n}"],
    "name": "timmy"
}

あなたが見ることができるようidListは、私が欲しいものではありません。私はそれで遊んでみましたが、何も働いていませんでした。誰もがこの標準のJSONライブラリで可能であれば知っていますか?またはEclipseは、私は別にジャクソンやgsonのようにダウンロードする必要が文句を言わないことを持っていることを他のライブラリ

マイケルZiober:

使用しないでくださいtoString、あなたが作成するときJSON Object全体が終わり、一度それを行うJSONに作成されます。

あなたのコードでは次のようになります。

ids.add(jsonIds);

以下のコード:

import org.json.JSONArray;
import org.json.JSONObject;

public class OrgJsonApp {
  public static void main(String[] args) {
      JSONObject root = new JSONObject();
      root.put("name", "timmy");
      root.put("age", "20");


      JSONObject ids = new JSONObject();
      ids.put("jobId", "123");
      ids.put("houseId", "5");

      JSONArray idList = new JSONArray();
      idList.put(ids);

      root.put("idList", idList);

      System.out.println(root.toString(4));
  }
}

版画:

{
    "name": "timmy",
    "idList": [{
        "jobId": "123",
        "houseId": "5"
    }],
    "age": "20"
}

アレイの形式を変更することは容易ではなく、基本クラスを拡張する必要があります。最も簡単な方法は、作成することですorg.jsonパッケージを:

package org.json;

import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;

public class JSONArrayIndent extends JSONArray {

    @Override
    public Writer write(Writer writer, int indentFactor, int indent) throws JSONException {
        try {
            boolean commanate = false;
            int length = this.length();
            writer.write('[');

            if (length > 0) {
                final int newindent = indent + indentFactor;

                Iterator<Object> iterator = iterator();
                while (iterator.hasNext()) {
                    Object next = iterator.next();
                    if (commanate) {
                        writer.write(',');
                    }
                    if (indentFactor > 0) {
                        writer.write('\n');
                    }
                    JSONObject.indent(writer, newindent);
                    try {
                        JSONObject.writeValue(writer, next,
                            indentFactor, newindent);
                    } catch (Exception e) {
                        throw new JSONException("Unable to write JSONArray value: " + next, e);
                    }
                    commanate = true;
                }
                if (indentFactor > 0) {
                    writer.write('\n');
                }
                JSONObject.indent(writer, indent);
            }
            writer.write(']');
            return writer;
        } catch (IOException e) {
            throw new JSONException(e);
        }
    }
}

そして、上記の例の変更1行で:

JSONArray idList = new JSONArrayIndent();

その後それが印刷されます。

{
    "name": "timmy",
    "idList": [
        {
            "jobId": "123",
            "houseId": "5"
        }
    ],
    "age": "20"
}

しかし、私はので、それは価値があるかわからないJSONインデントは、クライアント・サーバ間の通信には何も変わりません。また、私たちは維持する必要がありますJSON我々はできる限り小さくペイロードをし、オンデマンドでのみ、それをフォーマットします。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=333734&siteId=1