【问题标题】:org.json.JSONException: No value for itemorg.json.JSONException:项目没有值
【发布时间】:2013-08-20 04:39:00
【问题描述】:

当我尝试使用 android 应用查看 MySql 数据库中的数据时,我得到了一个 No value for {"username":"sara"}{"username":"john"} JSONException。

  08-20 04:26:39.396: W/System.err(4732): org.json.JSONException: No value for {"username":"sara"}{"username":"john"}
  08-20 04:26:39.497: W/System.err(4732):   at org.json.JSONObject.get(JSONObject.java:354)
  08-20 04:26:39.497: W/System.err(4732):   at org.json.JSONObject.getJSONArray(JSONObject.java:544)
  08-20 04:26:39.517: W/System.err(4732):   at com.example.phpapp.ViewData$MyTask.doInBackground(ViewData.java:69)
  08-20 04:26:39.577: W/System.err(4732):   at com.example.phpapp.ViewData$MyTask.doInBackground(ViewData.java:1)
  08-20 04:26:39.606: W/System.err(4732):   at android.os.AsyncTask$2.call(AsyncTask.java:287)
  08-20 04:26:39.606: W/System.err(4732):   at java.util.concurrent.FutureTask.run(FutureTask.java:234)
  08-20 04:26:39.631: W/System.err(4732):   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
  08-20 04:26:39.636: W/System.err(4732):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
  08-20 04:26:39.636: W/System.err(4732):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  08-20 04:26:39.636: W/System.err(4732):   at java.lang.Thread.run(Thread.java:856)

PHP 代码

$con = mysql_connect($dbhost, $dbuser, $dbpass) or die("can't connect");
$db = mysql_select_db($dbname) or die("no such db name");
$query = "select username from users";
$result = mysql_query($query);
while($row=  mysql_fetch_array($result)){
    echo json_encode($row);
}

jsonArray

​​>
{"username":"sara"}{"username":"john"}

安卓代码

HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is));

String str = "";
while((str = br.readLine()) != null){
    s.append(str+"\n");
    mystr = s.toString();
}   

JSONObject object = new JSONObject(mystr);
JSONArray Jarray = object.getJSONArray(mystr);
for (int i = 0; i < Jarray.length(); i++) {
    JSONObject Jasonobject = Jarray.getJSONObject(i);
    st = Jasonobject.getString("username");
    alist.add(str);
}

如何解决这个问题?谢谢

【问题讨论】:

    标签: php android mysql arrays


    【解决方案1】:

    问题出在这一行

     JSONArray Jarray = object.getJSONArray(mystr);
    

    其中mystr={"username":"sara"}{"username":"john"}(来自输入流的数据)

    因此,您在这里尝试从 JSONObject object 访问索引为 mystr 的 JSON 数组

    这在技术上永远不存在,所以它给了JSONException: No value for {"username":"sara"}{"username":"john"}

    解决方案

    然后使用 JJPA 的答案更正 PHP 代码

    使用

    JSONArray Jarray=new JSONArray(mystr);
    

    【讨论】:

      【解决方案2】:

      这个

      {"username":"sara"}{"username":"john"}

      不是一个 json 数组,甚至不是一个有效的 json 字符串。

      如果这是一个 json 数组,则如下所示,

      [{"username":"sara"},{"username":"john"}]

      所以你需要在这些对象之间有一个逗号,仅供参考,json 对象将使用{},而数组将使用[]。所以你需要更正json字符串,然后为此编写json解析器。

      你的 php 代码应该修改如下,打印 json 数组,

      $con = mysql_connect($dbhost, $dbuser, $dbpass) or die("can't connect");
      $db = mysql_select_db($dbname) or die("no such db name");
      $query = mysql_query("select username from users");
      $return_arr = array();
      
      while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
          $row_array['id'] = $row['id'];
          $row_array['col1'] = $row['col1'];// and your respective cols
          array_push($return_arr,$row_array);
      }
      
      echo json_encode($return_arr);
      

      【讨论】:

      • 如何获取有效的 json 字符串?{"username":"sara"}{"username":"john"} 来自上面的 php 代码。
      • 使用this链接检查您的json字符串与您的json字符串和[{"username":"sara"},{"username":"john"}]的正确性并知道结果。阅读消息。
      • 使用正确的 php 代码,为您提供有效的 json 数组。现在您实际上是在为每个循环打印一个 json 对象的值。我已经给你一个示例 php 代码
      猜你喜欢
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多