JSON-Validator: проверка ответа верна, но проверка URL не выполняется

#php #android #json #android-volley

#php #Android #json #android-volley

Вопрос:

Я создал простой код ответа в формате json, но в ANDROID он отображается как строка, а не объект, поэтому я зашел на веб-сайт JSON Validator. Когда я копирую ответ, он говорит, что JSON является верным, но когда я проверяю по URL, он показывает мне следующее:

 Error:Invalid encoding, expecting UTF-8, UTF-16 or UTF-32.[Code 29, Structure 0]
Error:Expecting object or array, not string.[Code 1, Structure 1]
Error:Strings should be wrapped in double quotes.[Code 17, Structure 1]
  

Ответ Json:

 {"questions":[{"id":"1","user_id":"1","city":"1","question":"we","likes":"0","img":"0","req_date":"2016-10-03 23:06:06","qort":"q","user_name":"basel","user_img":"0","comments":"$num"},{"id":"2","user_id":"1","city":"1","question":"u0633u064a u0634u0633u064au0628u0633 u0628u064au0633 u0628u064au0633","likes":"0","img":"0","req_date":"2016-10-03 23:30:44","qort":"q","user_name":"basel","user_img":"0","comments":"0"},{"id":"3","user_id":"3","city":"2","question":"u0633u064a u0634u0633u064a2222u0628u0633 u0628u064au0633 u0628u064au0633","likes":"0","img":"0","req_date":"2016-10-03 23:32:06","qort":"q","user_name":"u0645u062du0645u062f u0627u0644u0633u0639u064au062fu064a","user_img":"","comments":"0"},{"id":"4","user_id":"1","city":"1","question":"u0645u0631u062du0628u0627 u0645u0631u062du0628u0627 u062au0633u064au0633u064a u062au0633u064a u0633u062au0646u064au0645 u0633u064a u0633u0646u064a u0633u0646u0645u064a u0633u0646 u0646u0633u0634u064a u0649u0646u0645u0629","likes":"0","img":"0","req_date":"2016-10-03 23:32:59","qort":"q","user_name":"basel","user_img":"0","comments":"0"},{"id":"5","user_id":"1","city":"1","question":"u0645u0631u062du0628u0627 u0645u0631u062du0628u0627 u062au0633u064au0633u064a u062au0633u064a u0633u062au0646u064au0645 u0633u064a u0633u0646u064a u0633u0646u0645u064a u0633u0646 u0646u0633u0634u064a u0649u0646u0645u0629","likes":"0","img":"0","req_date":"2016-10-04 00:18:41","qort":"q","user_name":"basel","user_img":"0","comments":"0"}]}
  

JSON в красивом формате:

 {
    "questions": [
        {
            "id": "1",
            "user_id": "1",
            "city": "1",
            "question": "we",
            "likes": "0",
            "img": "0",
            "req_date": "2016-10-03 23:06:06",
            "qort": "q",
            "user_name": "basel",
            "user_img": "0",
            "comments": "$num"
        },
        {
            "id": "2",
            "user_id": "1",
            "city": "1",
            "question": "سي شسيبس بيس بيس",
            "likes": "0",
            "img": "0",
            "req_date": "2016-10-03 23:30:44",
            "qort": "q",
            "user_name": "basel",
            "user_img": "0",
            "comments": "0"
        },
        {
            "id": "3",
            "user_id": "3",
            "city": "2",
            "question": "سي شسي2222بس بيس بيس",
            "likes": "0",
            "img": "0",
            "req_date": "2016-10-03 23:32:06",
            "qort": "q",
            "user_name": "محمد السعيدي",
            "user_img": "",
            "comments": "0"
        },
        {
            "id": "4",
            "user_id": "1",
            "city": "1",
            "question": "مرحبا مرحبا تسيسي تسي ستنيم سي سني سنمي سن نسشي ىنمة",
            "likes": "0",
            "img": "0",
            "req_date": "2016-10-03 23:32:59",
            "qort": "q",
            "user_name": "basel",
            "user_img": "0",
            "comments": "0"
        },
        {
            "id": "5",
            "user_id": "1",
            "city": "1",
            "question": "مرحبا مرحبا تسيسي تسي ستنيم سي سني سنمي سن نسشي ىنمة",
            "likes": "0",
            "img": "0",
            "req_date": "2016-10-04 00:18:41",
            "qort": "q",
            "user_name": "basel",
            "user_img": "0",
            "comments": "0"
        }
    ]
}
  

PHP-код:

 <?php

header("Content-Type:application/json; charset=utf-8");
include_once("config.php");

class Questions
{
    public $id;
    public $user_id;
    public $city;
    public $question;
    public $likes;
    public $img;
    public $req_date;
    public $qort;
    //public $user_name;
    //public $user_img;
    //public $comments;
    //didnt help
}                               

function getQ (){
    $sql= "select * from `questions`";
    $result = mysql_query($sql);    
    if (mysql_num_rows($result) > 0){   
    $ques=array();
    while ($ques_info= mysql_fetch_array($result)){ 
        $uid = $ques_info['user_id'];
        $qid = $ques_info['id'];
        $info = new Questions();
        $info->qort= 'q';   
        $info->id= $ques_info['id'];        
        $info->user_id=$ques_info['user_id'];       
        $info->city=$ques_info['city'];             
        $info->question=$ques_info['question'];                     
        $info->img='0';         
        $info->likes=$ques_info['likes'];               
        $info->req_date=$ques_info['req_date'];             
            $sqluname = "select * from `users` where `id`='".$uid."'";
            $resultuname = mysql_query($sqluname);
            if (mysql_num_rows($resultuname) > 0){
                while ($user_info= mysql_fetch_array($resultuname)){
                $info->user_name= $user_info['name'];
                $info->user_img= $user_info['img'];
                }
            }
            $sqlcomments = "select * from `question_comments` where `question_id`='".$qid."'";
            $resultcomments = mysql_query($sqlcomments );
            $num = mysql_num_rows($resultcomments);
            if ($num > 0){
                $info->comments= '$num';
            }else{
            $info->comments= '0';
            }
        array_push($ques, $info);
    }
        echo json_encode(array('questions' => $ques), true);
    }
}

switch ($_GET['do'])
{   
    case 'getQ':
    {
        getQ ();
    }
}
  

Я собираюсь сойти с ума, что не так, пожалуйста?
В Android я использую Voelly, я получаю ошибку типа java.lang.string, которую нельзя преобразовать в JSONObject

код Android:

    private void fetchPosts() {
        Log.e("ir", "fetchPosts");
        JsonObjectRequest postReq = new JsonObjectRequest(Request.Method.GET, url, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                    try {
                        Log.e("ir", "onResponse");
                        Log.e("ir", "GONE");
                        JSONArray response = jsonObject.getJSONArray("questions");
                        for (int i = 0; i < response.length(); i  ) {
                            JSONObject obj = response.getJSONObject(i);
                            qlist ads = new qlist();
                            ads.setQort(obj.getString("qort"));
                            ads.setIdquestion(obj.getString("id"));
                            ads.setIduser(obj.getString("user_id"));
                            ads.setQuestion(obj.getString("question"));
                            ads.setLikes(obj.getString("likes"));
                            ads.setComments(obj.getString("comments"));
                            ads.setImg(obj.getString("img"));
                            ads.setReq_date(obj.getString("req_date"));
                            ads.setUser_name(obj.getString("user_name"));
                            ads.setUser_img(obj.getString("user_img"));
                            postsList.add(ads);
                            Log.e("ir", "questions");
                        }
                        getManshateAd();
                    } catch (JSONException e) {
                        Log.e("ir", "JSONException");
                        e.printStackTrace();
                    }
                    adapter.notifyDataSetChanged();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError arg0) {
                Log.e("ir", "onErrorResponse" arg0);

            }
        }) {
        @Override
        public Request.Priority getPriority() {
            return Request.Priority.IMMEDIATE;
        }
        };
        postReq.setRetryPolicy(new DefaultRetryPolicy(50000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        AppController.getInstance().addToRequestQueue(postReq);
    }
  

заранее спасибо.

Ответ №1:

Проверьте свою кодировку respose. Возможно, ваш ответ содержит символ спецификации.

Комментарии:

1. Нет, он не содержит никаких символов спецификации

2. после двух дней напряженной работы я обнаружил, что config.php файл был закодирован в UTF-8-BOM в notepad , поэтому я преобразовал его в UTF-8, спасибо, что указали мне на это