代码之家  ›  专栏  ›  技术社区  ›  yogman

列表<Map<String,Object>>到org.json.json对象?

  •  13
  • yogman  · 技术社区  · 15 年前
    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}
    
    8 回复  |  直到 12 年前
        1
  •  23
  •   ShadowJohn    12 年前
    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

        2
  •  4
  •   CSchulz cL83    12 年前
    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();
    }
    
        3
  •  2
  •   gavinandresen    15 年前

    最后需要得到JSONArray(对应于列表)的JSONObjects(映射)。

    尝试将json变量声明为JSONArray而不是JSONObject(我相信JSONArray构造函数会做正确的事情)。

        4
  •  2
  •   StaxMan    15 年前

    我推荐杰克逊, http://jackson.codehaus.org/Tutorial 它允许映射到List/Map/Integer/String/Boolean/null以及真正的bean/pojo。只要给它指定类型,它就会将数据映射到您,或者将Java对象作为Json写入。

        5
  •  1
  •   CSchulz cL83    12 年前

    在列表中嵌套了一个映射。您试图调用映射而不必先遍历列表。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));
    }
    
        6
  •  1
  •   CSchulz cL83    12 年前

    这对我很有效:

    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();
    }
    
        7
  •  1
  •   Balaji Dubey    7 年前

    如果你正在使用

    https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple/1.1.1

    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);
    
    JSONArray jsonArray = new JSONArray();
    jsonArray.addAll(listOfMaps);
    
        8
  •  0
  •   martianwars    8 年前

    JSONArray 直接作为,

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

    或者使用Java8迭代列表(比如@ShadowJohn solution):

    String toJson(Collection<Map<String, Object>> list)
    {       
        return new JSONArray( 
                list.stream()
                    .map((map) -> new JSONObject(map))
                .collect(Collectors.toList()))
            .toString();
    }