【问题标题】:How to format JSON in Android如何在 Android 中格式化 JSON
【发布时间】:2015-03-23 11:29:04
【问题描述】:

我在 sqlite 表中有多条记录,现在我正在尝试通过单击按钮上传所有数据

为此,我编写了以下代码:

        Cursor cursor = databaseDataHelper.getAllData();

        JSONArray arr = new JSONArray();
        JSONObject jobj ;
        cursor.moveToFirst();

        if(cursor.moveToFirst()) {
        do {
        jobj = new JSONObject();

        try {

            jobj.put("Name", cursor.getString(cursor.getColumnIndex("Name")));
            jobj.put("Title", cursor.getString(cursor.getColumnIndex("Title")));                            

        } catch (JSONException e) {
            e.printStackTrace();
        }

        }   while(cursor.moveToNext());

        try { 
            JSONObject jsonObject=new JSONObject();
            jsonObject.put("data", arr);
            arr.put(jobj);
        } catch (JSONException e) { 
            e.printStackTrace();
        }

        String st = jobj.toString();
        Log.d("database::--", st);

        String url = "http://domain.com/uploadBulkDataTest.php";

        List<NameValuePair> params = new ArrayList<NameValuePair>(); 
        params.add(new BasicNameValuePair("AllData", st));

        String resultServer = helper.getHttpPost(url,params); 
        Log.d("Entire string::", " " + resultServer); 

        /*** Default Value ***/
        strStatusId = "0"; 
        strMessage = ""; 

        try { 
                jsonObject = new JSONObject(resultServer); 
                strStatusId = jsonObject.getString("StatusID"); 
                strMessage = jsonObject.getString("Message"); 
                } catch (JSONException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace();
            } 
        }

每当我点击按钮时,日志都会显示:

database::--(22393): {"data":[],"Name":"Name1","Title":"Title1"}

而它应该是这样的:

{"data":[
{
"Name":"Name1",
"Title":"Title1"
},
{
"Name":"Name2",
"Title":"Title2"
}
]}

【问题讨论】:

    标签: android json sqlite


    【解决方案1】:

    所需的 JSON 格式:

    JSONObject which contain JSONArray of JSONObject's.
    

    这样做:

    jobj = new JSONObject();
    JSONArray arr = new JSONArray();
    do {  
        //Create JSONObject  and add ImageName,Title values
         JSONObject jsonObject=new JSONObject();
         jsonObject.put("ImageName", cursor.getString(cursor.getColumnIndex("Name")));
         jsonObject.put("Title", cursor.getString(cursor.getColumnIndex("Title")));  
         // add jsonObject to JSONArray
        arr.add(jsonObject);
     }   while(cursor.moveToNext());
    
    //Add arr JSONArray to jobj
    jobj.put("data", arr)
    

    【讨论】:

    • 我对使用什么和删除什么感到困惑......?
    • @Sophie: 只需在 while 循环中添加 arr.put(jobj);
    • @Sophie: 并将jobj.put("data", arr); 行替换为JSONObject jsonObject=new JSONObject();jsonObject.put("data", arr);
    • 我已经尝试过,但仍然像以前一样采用相同的格式
    • @Sophie:请显示更新后的代码可能缺少一些小点
    【解决方案2】:

    这样做

    JSONObject finalobject = new JSONObject();
    JSONArray jsonArray = new JSONArray();
    
    for(int i=1;i<3;i++){
    
    JSONObject obj = new JSONObject();
    obj.put("Name", "Name"+i));
    obj.put("Title", "Title"+i); 
    jsonArray.put(obj);
    
    }
    
    finalobject.put("data", jsonArray);
    

    【讨论】:

      【解决方案3】:

      你的 json 格式应该是这样的..

      JSONObject data=new JSONObject();
          JSONArray arr=new JSONArray();
          JSONObject jobj=new JSONObject();
          do
          {
            jobj.put("ImageName", cursor.getString(cursor.getColumnIndex("Name")));
            jobj.put("Title", cursor.getString(cursor.getColumnIndex("Title")));
      
            arr.put(jobj);
          }while(cursor.moveToNext()) ;
      
      
          data.put("data", arr);
      

      【讨论】:

        猜你喜欢
        • 2017-04-28
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-30
        相关资源
        最近更新 更多