16
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();

map.put("abc", "123456");
map.put("def", "hmm");
list.add(map);
JSONObject json = new JSONObject(list);
try {
    System.err.println(json.toString(2));
} catch (JSONException e) {
    e.printStackTrace();
}

このコードの何が問題になっていますか?

出力は次のとおりです。

{"empty": false}
4

8 に答える 8

23
public String listmap_to_json_string(List<Map<String, Object>> list)
{       
    JSONArray json_arr=new JSONArray();
    for (Map<String, Object> map : list) {
        JSONObject json_obj=new JSONObject();
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            try {
                json_obj.put(key,value);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }                           
        }
        json_arr.put(json_obj);
    }
    return json_arr.toString();
}

よし、これを試してみてください〜これは私にとってはうまくいきました:D

于 2012-05-03T07:19:55.550 に答える
4
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();

map.put("abc", "123456");
map.put("def", "hmm");
list.add(map);
// it's wrong JSONObject json = new JSONObject(list);
// if u use list to add data u must be use JSONArray

JSONArray json = JSONArray.fromObject(list);
try {
    System.err.println(json.toString(2));
} catch (JSONException e) {
    e.printStackTrace();
}
于 2010-04-14T04:35:58.647 に答える
2

また、json.org のリストにある他のパーサーの 1 つを使用することを検討できます。それらのほとんどは、Json の「オブジェクト」と「配列」をネイティブに java.util.Maps と java.util.Lists にマップできるようにします。または場合によっては実際の Java オブジェクトにも。

私のお勧めは Jackson です。http://jackson.codehaus.org/Tutorial は、List/Map/Integer/String/Boolean/null へのマッピングと、実際の Beans/POJO へのマッピングを可能にします。タイプを指定するだけで、データがマップされるか、Java オブジェクトが Json として書き込まれます。berlios の「json-tools」や google-gson などの他のものも、同様の機能を公開しています。

于 2009-02-24T20:58:01.997 に答える
1

リスト内にネストされたマップがあります。最初にリストを反復せずに Map を呼び出そうとしています。JSON は魔法のように感じることがありますが、実際にはそうではありません。すぐにいくつかのコードを投稿します。
マップのリストではなくマップのマップを作成する方が、JSON との一貫性が高くなります。

JSONObject json = new JSONObject(list);
Iterator<?> it = json.keys();
while (keyed.hasNext()) {
    String x = (String) it.next();
    JSONObject jo2 = new JSONObject(jo.optString(x));
}
于 2009-02-04T18:46:12.287 に答える
1

これは私のために働いた:

List<JSONObject> jsonCategories = new ArrayList<JSONObject>();

JSONObject jsonCategory = null;

for (ICategory category : categories) {
    jsonCategory = new JSONObject();
    jsonCategory.put("categoryID", category.getCategoryID());
    jsonCategory.put("desc", category.getDesc());
    jsonCategories.add(jsonCategory);
}
try {
    PrintWriter out = response.getWriter();
    response.setContentType("text/xml");
    response.setHeader("Cache-Control", "no-cache");
    _log.info(jsonCategories.toString());
    out.write(jsonCategories.toString());

} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
于 2009-10-15T20:20:13.397 に答える
0

両方を使用してそれを行うことができます:

JSONArray直接、

String toJson(Collection<Map<String, Object>> list)
{       
    return new JSONArray(list).toString();
}

または、リストを Java8 で反復することによって (@ShadowJohn ソリューションのように):

String toJson(Collection<Map<String, Object>> list)
{       
    return new JSONArray( 
            list.stream()
                .map((map) -> new JSONObject(map))
            .collect(Collectors.toList()))
        .toString();
}
于 2016-12-06T15:20:50.893 に答える