JSONException:java.lang.String 类型的值无法转换为 JSONObject


JSONException: Value of type java.lang.String cannot be converted to JSONObject

我是Android的新手,但我找到了一个应用程序,它可以与我一直在努力工作并填充数据库的网络爬虫一起使用。这是一个基本的应用程序,它使用 PHP 脚本从 MySQL 数据库中检索值并将它们显示在您的安卓设备上。

这是 PHP:

<?php
try {
    $conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, *******);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $results=$conn->query('SELECT * FROM Recipes');
    while ($results = $row->fetch(PDO::FETCH_ASSOC)){
    $output[]=$row;
    print(json_encode($output));
    }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
$conn = null;
?>

原始代码使用mysql_connect但我实现了PDO。

这是Java:

protected void onPostExecute(Void v) {
        // ambil data dari Json database
        try {
            JSONArray Jarray = new JSONArray(result);
            for(int i=0;i<Jarray.length();i++)
            {
            JSONObject Jasonobject = null;
            //text_1 = (TextView)findViewById(R.id.txt1);
            Jasonobject = Jarray.getJSONObject(i);
            //get an output on the screen
            //String id = Jasonobject.getString("id");
            String name = Jasonobject.getString("Title");
            String db_detail="";
            if(et.getText().toString().equalsIgnoreCase(name)) {
            db_detail = Jasonobject.getString("ingredient");
            text.setText(db_detail);
            break;
            }
            //text_1.append(id+"'t't"+name+"'t't"+password+"'t't"+"'n");
            }
            this.progressDialog.dismiss();
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("log_tag", "Error parsing data "+e.toString());
        }
    }

洛格猫 说:

解析数据时出错 org.json.JSONException:无法将 java.lang.String 类型的值 br 转换为 JSONArray

我尝试从这个堆栈溢出问题中使用{左大括号和右大括号解决方案,但我认为不是这样。

在执行后,首先获取 JSONObject,然后获取数组。如果仍然相同的消息,则您的服务器没有返回正确的 json 对象。

JSONObject jobj = new JSONObject(result);
JSONArray Jarray = jobj.getJSONArray("output");
<?php
try {
    $conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, ********);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
$sql=mysql_query("select * from Recipes");
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>

这无济于事。您混淆了mysql_*和PDO,这是不可能的。如果与 PDO 建立连接,则无法使用 mysql_* 查询访问数据库。

因此,您会收到错误,并且您的页面不是有效的 Json,从而导致错误。

相反,请仅使用 PDO(mysql_* 由于安全问题而弃用):

<?php
try {
    $conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, ********);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
$sql = $conn->query("select * from Recipes");
while (($row = $sql->fetch(PDO::FETCH_ASSOC)) !== false)
    $output[]=$row;
print(json_encode($output));
?>

如果你的结果是数组列表,那么你可以使用以下代码来做到这一点

ArrayList<String> list = new ArrayList<String>();
list.add("blah");
list.add("bleh");
JSONArray jsArray = new JSONArray(list);