0

如何转换从这种格式的服务器返回的数据

[{"Food":"orange","Protein":"52","Water":"52","Magnesium":"12","Phosphorus":"12","Sodium":"12.5","Zinc":"45","Vit_C":"12","Fat_Sat":"12","Fat_Mono":"45","Vit_B12":"45","Calcium":"45","Calories":"4565","Fiber":"12","Cholesterole":"12","Potassium":"12","Sugar_Tot":"55","Iron":"45","Folic_Acid":"55","carbohydrates":"55","Vit_K":"5","Serving_Size":"\u062d\u0628\u0629"}]

对此

"[{\"Food\":\"\\u062a\\u0641\\u0627\\u062d \\u0628\\u062f\\u0648\\u0646 \\u0627\\u0644\\u0642\\u0634\\u0631\\u0629\",\"Protein\":\"0.27\",\"Water\":\"86.67\",\"Magnesium\":\"4\",\"Phosphorus\":\"11\",\"Sodium\":\"0\",\"Zinc\":\"0.05\",\"Vit_C\":\"4\",\"Fat_Sat\":\"0\",\"Fat_Mono\":\"0\",\"Vit_B12\":\"0\",\"Calcium\":\"5\",\"Calories\":\"48\",\"Fiber\":\"1\",\"Cholesterole\":\"0\",\"Potassium\":\"90\",\"Sugar_Tot\":\"10.1\",\"Iron\":\"0.07\",\"Folic_Acid\":\"0\",\"carbohydrates\":\"13\",\"Vit_K\":\"0.6\"}]"; 

因为第一种格式在 emulator 2.2 中导致异常( parssingorg.json.JSONException: Value of type java.lang.String cannot be convert to JSONArray)

this is part of my code :

try{
                    BufferedReader reader = new BufferedReader(new InputStreamReader(
                            is, "utf-8"), 8);
                    sb = new StringBuilder();

                    String line = "0";
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);}

                    is.close();

                    result =sb.toString();
                   // result = result.replace('\"', '\'').trim();
                    Log.d("",result);
                    }
                    catch(Exception e){
                        Log.e("log_tag", "error" + e.toString());       
                        }

                        Log.d("",result);  
                    try{
                                                jArray = new JSONArray(result);
                        JSONObject json_data = null;

                        for (int i = 0; i < jArray.length(); i++) {
                         json_data = jArray.getJSONObject(i);
                         if(json_data!=null ) 
                          {
                             foodName=json_data.getString("Food");
                            Description=json_data.getInt("Calories");               
                             item.setName(foodName);
                             item.setDescription(10);
                             item.setSelected(false);
                             MealActivity.foodList.add(item);   
                             item=new ItemInList();
4

2 回答 2

1

返回的 JSON 文件不完整,它缺少末尾的方括号来关闭数组。

如果此 JSON aways 返回,则在末尾手动添加右方括号

// your code
result =sb.toString();
if(!result.endsWith("]")) {
  result = result + "]";
}
// continue the rest of the cod

您也可以使用此代码检查它是否是有效的 JSON 检查文件是否为 json、java

我希望这有帮助

于 2012-05-07T20:13:18.263 回答
0

我假设]行的末尾有一个从服务器返回的数据是一个带有 1 个 JsonObject 的 JSON 数组。您可以使用以下方法解析它:

JSONArray jArray = new JSONArray(result);
String foodName = jArray.getJSONObject(0).getString("Food");

等等..

于 2012-05-07T20:13:58.640 回答