json创建和解析的问题

时间:2012-10-02 10:31:37

标签: android json

我正面临代码的某种问题。以下是我生成json数据的代码

for(int i=0; i < allEds.size(); i++){
                String edsText = allEds.get(i).getText().toString();                                           
               //spinner = allSpns.get(i);
               String spinSelected=allSpns.get(i).getSelectedItem().toString();                  
               try
                {
                   JSONObject json = new JSONObject();          
                   json.put("FieldName", edsText);
                   json.put("FieldType",spinSelected);
                   parent.accumulate("data", json);



                }
                catch (JSONException e)
                {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }                   

            }

如果我为json创建了多个条目,它可以正常运行

correct out put
{"data":[{"FieldType":"Character","FieldName":"fffg"},{"FieldType":"Character","FieldName":"fg"]}

当只有一个条目作为json时,它会提供以下内容

{"data":{"FieldType":"Character","FieldName":"ffg","Id":0}}

解析第二个json时遇到错误。我的代码出了什么问题?

我用来解析json的代码

JSONObject jsonObj = new JSONObject(folderStructure);
        JSONArray data = jsonObj.getJSONArray("data");
         //ArrayList<HashMap<String, String>> folderList = new ArrayList<HashMap<String, String>>();
        for(int i=0; i<data.length(); i++)
        {

            //HashMap<String, String> map = new HashMap<String, String>();
             JSONObject obj=data.getJSONObject(i);
             String id = obj.getString("Id"); 
                String valueName = obj.getString("FieldName"); 
                String valueType = obj.getString("FieldType"); 
}

3 个答案:

答案 0 :(得分:0)

只有一个条目,您的代码不会创建JSONArray。但是,您的解析代码总是需要这个数组。

答案 1 :(得分:0)

在解析json代码中,

  

您将数据作为 json数组获取。这就是为什么第一个是Ok [数据是   json数组]和第二个[数据是json对象]不行。

为了避免这种情况,你应该使用相同的格式来生成json数据,就像第二个那样

{"data":[{"FieldType":"Character","FieldName":"ffg","Id":0}]}

答案 2 :(得分:0)

JSONObject parent = new JSONObject();
JSONArray jdata = new JSONArray();

    try{
         for(int i=0; i < allEds.size(); i++){
             JSONObject childObj = new JSONObject();         
             childObj .put("FieldName", allEds.get(i).getText().toString());
             childObj .put("FieldType",allSpns.get(i).getSelectedItem().toString());

             jdata .put(childObj).toString();
            }
          parent.put("data",jdata);
       }
       catch (JSONException e){
         // TODO Auto-generated catch block
         e.printStackTrace();
       }