无法从 JSON 接收数据 - PHPMyAdmin

Posted

技术标签:

【中文标题】无法从 JSON 接收数据 - PHPMyAdmin【英文标题】:Can't recieve data from JSON - PHPMyAdmin 【发布时间】:2017-11-25 15:18:21 【问题描述】:

我有一个 php 脚本,用于从 BBDD 获取一些信息:

<?php 
//Creating a connection
$con = mysqli_connect("localhost:3306","root","","database");

if (mysqli_connect_errno())

   echo "Failed to connect to MySQL: " . mysqli_connect_error();


$sql= "SELECT * FROM tQuestions";

$result = mysqli_query($con ,$sql);

while ($row = mysqli_fetch_assoc($result)) 
       
    $array[] = $row;
    (ONLY USED ON SECOND TRY) echo $row;

header('Content-Type:Application/json');

echo json_encode($array);

mysqli_free_result($result);

mysqli_close($con);
?>

当我在我的 android 应用程序上使用它时,我收到一个空值。此外,当我转到正确的链接时,我会收到一个没有信息的页面和一个无效的 JSON 文件。

当我输入echo $row 来查看我收到的内容时,我有一个类似这样的字符串:ArrayArrayArrayArray,它有 50 个“数组”字,与我在数据库中的行相同。

我做错了什么?

这是我的 Android 代码:

private void getQuestionsFromDB() 

    AsyncTask<Void, Void, JSONArray> asyncTask = new AsyncTask<Void, Void, JSONArray>() 
        @Override
        protected JSONArray doInBackground(Void... params) 

            JSONArray array = null;
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url("http://www.am-motion.eu/scriptsapp/preguntas.php")
                    .build();
            try 
                Response response = client.newCall(request).execute();

                array = new JSONArray(response.body().string());
             catch (IOException e) 
                e.printStackTrace();
             catch (JSONException e) 
                e.printStackTrace();
            
            return array;
        

        @Override
        protected void onPostExecute(JSONArray array) 
            try 
                for (int i = 0; i < array.length(); i++) 
                    JSONObject object = null;
                    object = array.getJSONObject(i);

                    listQuestions.add(object.getString("Question"));

                    listAnswers.add(object.getString("Answer1"));
                    listAnswers.add(object.getString("Answer2"));
                    listAnswers.add(object.getString("Answer3"));
                    listAnswers.add(object.getString("Answer4"));

                    listCorrectAnswer.add(object.getString("Answer"));
                
             catch (JSONException e) 
                e.printStackTrace();
            
        
    ;

    asyncTask.execute();

【问题讨论】:

如果您从浏览器访问 URL,输出是什么?是否显示json 数据? 没有输出。我看到一个白页tihout信息。但是,如果我使用“echo $row”,则输出为“ArrayArrayArray...” 请检查您的 apache 错误日志,我只是好奇 json 模块未在您的 php 中激活 【参考方案1】:

您的问题是您将所有数组传递给“json_encode”函数。您必须使用 for 或 foreach 循环来解析值:

for ($i = 0; $i < sizeof($array); $i++) 
    echo json_encode($array[$i]);

如果你想要一个 JSONArray,你可以使用:

for ($i = 0; $i < sizeof($array); $i++) 
    if($i==0)
        echo '[';
        echo json_encode($array[$i]);
     else if ($i == sizeof($array) -1) 
        echo json_encode($array[$i]);
        echo "]";
     else 
        echo json_encode($array[$i]);
        echo ",";
    

【讨论】:

第一个工作正常,但第二个给我一个没有数据的页面,全是白衣。你知道为什么吗?我对第二个选项很感兴趣。 我在最后加上一个“”。但我认为格式根本不正确。它在最后,在“]”之前给了我两个额外的“,”。 而且它也没有放 "," 。正如我所说,只有在最后。 您是否复制/粘贴了 for 循环?因为我尝试使用本地数据库并且没关系,使用您的代码。 并用JSONLint测试了JSON数据,它说JSON是有效的

以上是关于无法从 JSON 接收数据 - PHPMyAdmin的主要内容,如果未能解决你的问题,请参考以下文章

C# Rest 服务 - 无法在服务方法中接收 JSON 请求

无法从使用 C# 开发的 Android 应用程序接收 json

无法使用新的json数据重新加载JQGrid

如何在 FutureBuilder 中解析从本地主机接收的 JSON 对象

为啥我无法从 OAuth 2 服务器作为 JSON 接收“访问令牌”并且我需要定义“redirect_uri”?

axios将数据从前端传到后端是对象还是数组