【问题标题】:Extra curly braket in JSON & ParsingJSON和解析中的额外花括号
【发布时间】:2013-11-17 23:34:57
【问题描述】:

我正在使用 rest ful 服务,它添加了额外的自动编号大括号,如图所示:

    {
  "budgets": [
    {
      "id": "1",
      "balance": "0",
      "addedBy": "Jhon",
      "NameBD": "Camping",
      "limitBD": "0",
      "DateBD": "2013-11-16 04:34:03"
    },
    {
      "id": "2",
      "balance": "0",
      "addedBy": "Aziz",
      "NameBD": "My Home",
      "limitBD": "0",
      "DateBD": "2013-11-16 10:33:11"
    },
    {
      "id": "3",
      "balance": "0",
      "addedBy": "Ryd",
      "NameBD": "My Department",


       "limitBD": "0",
          "DateBD": "2013-10-24 17:40:43"
        }
    ]
  }

当我尝试解析它们时,它在“预算”中没有显示任何价值 所以我尝试在 JSON Viewer 中查看它们:

这是我在 rest 控制器中的 PHP 函数:

public function allbudget_get()
    {
        $data = $this->db->get('budget');
        $this->response( array('budgets'=>$data->result()) , 200);
    }

有什么办法可以去掉?

更新:应用代码为:

private class DownloadJSON extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            // Locate the Class 
            bd = new ArrayList<AllBudgets>();
            // Create an array to populate the spinner 
            bdlist = new ArrayList<String>();
            // JSON file URL address
            jsonobject = JSONfunctions
                    .getJSONfromURL("http://localhost/SharedBudget/index.php/Budget/allbudget");

            try {
                // Locate the NodeList name
                jsonarray = jsonobject.getJSONArray("budgets");
                for (int i = 0; i < jsonarray.length(); i++) {
                    jsonobject = jsonarray.getJSONObject(i);

                    AllBudgets bdget = new AllBudgets();

                    bdget.setId(jsonobject.optString("id"));
                    bdget.setAddedBy(jsonobject.optString("addedBy"));
                    bdget.setNameBD(jsonobject.optString("NameBD"));
                    bdget.setDateBD(jsonobject.optString("DateBD"));
                    bdget.add(bdget);

                    // Populate spinner with budget names
                    bdlist.add(jsonobject.optString("NameBD"));

                }
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

这里是解析的JSON代码

公共类 JSON 函数 {

    public static JSONObject getJSONfromURL(String url) {
        InputStream is = null;
        String result = "";
        JSONObject jArray = null;

        // Download JSON data from URL
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url);
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection " + e.toString());
        }

        // Convert response to string
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
        } catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }

        try {

            jArray = new JSONObject(result);
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }

        return jArray;
    }
}

更新 LOGCAT 我也有 setter 和 getter,但我知道它们不是 logcat 显示的问题:

11-18 21:32:39.680: D/InputTransport(27646): Input channel constructed: name='ClientState{43f51ee0 uid 10152 pid 27646} (server)', fd=59
11-18 21:32:40.760: E/Error(27646): No value for budgets
11-18 21:32:40.760: W/System.err(27646): org.json.JSONException: No value for budgets
11-18 21:32:40.765: W/System.err(27646):    at org.json.JSONObject.get(JSONObject.java:354)
11-18 21:32:40.765: W/System.err(27646):    at org.json.JSONObject.getJSONArray(JSONObject.java:548)
11-18 21:32:40.765: W/System.err(27646):    at com.androidbegin.jsonspinnertutorial.MainActivity$DownloadJSON.doInBackground(MainActivity.java:49)
11-18 21:32:40.765: W/System.err(27646):    at com.androidbegin.jsonspinnertutorial.MainActivity$DownloadJSON.doInBackground(MainActivity.java:1)
11-18 21:32:40.765: W/System.err(27646):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-18 21:32:40.765: W/System.err(27646):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-18 21:32:40.765: W/System.err(27646):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-18 21:32:40.765: W/System.err(27646):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-18 21:32:40.765: W/System.err(27646):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-18 21:32:40.765: W/System.err(27646):    at java.lang.Thread.run(Thread.java:841)
11-18 21:32:41.230: D/dalvikvm(27646): GC_FOR_ALLOC freed 214K, 16% free 10193K/12064K, paused 20ms, total 21ms
11-18 21:32:41.230: I/dalvikvm-heap(27646): Grow heap (frag case) to 12.641MB for 1127536-byte allocation
11-18 21:32:41.255: D/dalvikvm(27646): GC_FOR_ALLOC freed <1K, 15% free 11294K/13168K, paused 22ms, total 22ms
11-18 21:32:41.265: D/AbsListView(27646): Get MotionRecognitionManager
11-18 21:32:41.275: D/InputTransport(27646): Input channel constructed: name='44913558 PopupWindow:42738418 (client)', fd=56
11-18 21:32:41.300: D/AbsListView(27646): unregisterIRListener() is called 
11-18 21:32:41.305: D/AbsListView(27646): unregisterIRListener() is called 
11-18 21:32:41.310: D/AbsListView(27646): unregisterIRListener() is called 
11-18 21:33:18.115: D/AbsListView(27646): unregisterIRListener() is called 

【问题讨论】:

  • 我不确定我是否理解。您有一个带有元素budgets 的对象,它是一个对象数组。那么问题出在哪里?
  • "当我尝试解析它们时,它在 "budgets" 中没有显示任何值" 显示您用来解析它的代码。正如 Machavity 所说,您发布的 JSON 是具有单个键/值的 JSON 对象。关键是预算,值是 JSON 数组。每个数组元素都是一个带有 6 个键/值的 JSON 对象。
  • @Squonk 我发布了代码
  • @Machavity 是的,在对象数组 budgets 下,每个对象都有一个数字,我不确定,但我认为这些数字并不重要,即使我我仍然收到“预算没有价值”错误。
  • @user2980953 :您的 InputStreamReader 正在使用 iso-8859-1 编码。你试过用 UTF-8 代替吗?

标签: php android json restful-architecture


【解决方案1】:

我找到了答案,我使用 httpPost 而函数使用 GET 所以我只是替换它:

HttpGet httpget = new HttpGet(url);

感谢所有试图提供帮助的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多