【问题标题】:How to correctly send JSON string from PHP and parse it in Java to get POJO?如何正确地从 PHP 发送 JSON 字符串并在 Java 中解析它以获取 POJO?
【发布时间】:2017-09-09 14:07:41
【问题描述】:

我正在使用json_encode 在 PHP 中创建 JSON 字符串。 $result 是我的 SQL 结果。

        $final_op="";
        if(empty($result) == false){

            $rows = array();
            while($r = mysqli_fetch_assoc($result)) {
                $rows[] = $r;
            }
            $final_op=json_encode($rows);
        }

当我在客户端得到这个 json 字符串时,我得到它就像

 [{"username":"vikasdevde","user_fname":"Vikas Devde","user_work":"Programmer"}]

我正在用 Java 解析它,如下所示

                 try{

                        JSONObject jObject = new JSONObject(response);
                        String aJsonUsername = jObject.getString("username");
                        String aJsonFname = jObject.getString("user_fname");
                        String aJsonUserWork = jObject.getString("user_work");

                  }catch(JSONException e){
                        e.printStackTrace();
                        System.out.println("JSON Exception");
                    }

但我得到一个 JSONException,可能是因为方括号周围,因为经过一些研究,我尝试使用硬编码字符串

  "{\"username\":\"vikasdevde\",\"user_fname\":\"Vikas Devde\",\"user_work\":\"Programmer\"}"

它奏效了。能否请您告诉我处理此问题的最佳方法是什么?

【问题讨论】:

  • 我不知道如何在 java 中阅读此内容,但您正在发送一个数组。您必须在 JAVA 中对其进行解析。编辑:在你的代码中,你似乎只是想把它当作一个简单的对象来读取,而不是一个数组 os 对象。
  • 是否期望您总是从结果集中准确地得到一行?
  • @FirstOne 是的,这就是我在这里要问的,它作为数组发送,我正在寻找处理这个问题的最佳方法。
  • 您应该使用 JSONArray 来迭代顶级项目并将每个数组项目作为 JSONObject 获取。
  • @RajdeepPaul 对于这种情况,我在结果中只得到一行,但如果您还可以提供一些关于如何使用多行完成的信息,这可能有助于我或其他任何人阅读。跨度>

标签: java php android json jsonexception


【解决方案1】:
JSONArray jsonarray = new JSONArray(response);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String username= jsonobject.getString("username");
    String user_fname= jsonobject.getString("user_fname");
    String user_work= jsonobject.getString("user_work");
}

这是正确的方法。

【讨论】:

    【解决方案2】:

    试试这个 -

    json_encode($rows, JSON_FORCE_OBJECT);
    

    如需更多参考,请查看此link

    【讨论】:

      【解决方案3】:

      尝试像这样更改您的 java 代码

      JSONArray jsonArray= new JSONArray(response);
      JSONObject jObject=jsonArray.getJSONObject(0);
      String aJsonUsername = jObject.getString("username");
      String aJsonFname = jObject.getString("user_fname");
      String aJsonUserWork = jObject.getString("user_work"); 
      

      用这个替换你的 try 块中的代码

      【讨论】:

        猜你喜欢
        • 2016-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        相关资源
        最近更新 更多