【问题标题】:android parsing using php generated JSONandroid解析使用php生成的JSON
【发布时间】:2017-02-01 13:19:20
【问题描述】:

我创建了一个 php 脚本并使用 java 将其拾取,但我无法将其转换为我可以使用的格式。

php

<?php  
//PDO is a extension which  defines a lightweight, consistent interface for accessing databases in PHP.  
$db=new PDO('mysql:dbname=mydb;host=localhost;','root','');  
//here prepare the query for analyzing, prepared statements use less resources and thus run faster  
$row=$db->prepare('select * from drinks');  

$row->execute();//execute the query  
$json_data=array();//create the array  
foreach($row as $rec)//foreach loop  
{  
$json_array['drinks_id']=$rec['drinks_id'];  
    $json_array['drink_name']=$rec['drink_name'];  
    $json_array['Description']=$rec['Description'];    
//here pushing the values in to an array  
    array_push($json_data,$json_array);  

}  

//built in PHP function to encode the data in to JSON format  
//print_r($json_array);
echo json_encode($json_data,JSON_FORCE_OBJECT);   
?>  

JSON 示例(每一行都是累积的,而不是在一个特定的标签名称下)

{
   "0":{
      "drinks_id":"1",
      "drink_name":"Uprising Treason West Coast IPA",
      "Description":"Beer"
   },
   "1":{
      "drinks_id":"2",
      "drink_name":"Flying Dog Snake Dog IPA",
      "Description":"Beer"
   },
   "2":{
      "drinks_id":"3",
      "drink_name":"Crafty Dan 13 Guns America IPA",
      "Description":"Beer"
   },
   "3":{
      "drinks_id":"4",
      "drink_name":"Sixpoint Resin Double IPA",
      "Description":"Beer"
   },
   "4":{
      "drinks_id":"5",
      "drink_name":"Sixpoint Bengali IPA",
      "Description":"Beer"
   },
   "5":{
      "drinks_id":"6",
      "drink_name":"ShipYard ",
      "Description":"Beer"
   },
   "6":{
      "drinks_id":"7",
      "drink_name":"Blue Moon Belgian White ",
      "Description":"Beer"
   },
   "7":{
      "drinks_id":"8",
      "drink_name":"BrewDog Punk IPA ",
      "Description":"Beer"
   },
   "8":{
      "drinks_id":"9",
      "drink_name":"Lagunitas IPA",
      "Description":"Beer"
   },
   "9":{
      "drinks_id":"10",
      "drink_name":"Brooklyn Larger ",
      "Description":"Larger"
   },
   "10":{
      "drinks_id":"11",
      "drink_name":"Hazy Hog Cloudy English Cider ",
      "Description":"Cider"
}
}

Android中的方法

private void parseJson() {
        DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
        HttpPost httppost = new HttpPost(url);
// Depends on your web service
        httppost.setHeader("Content-type", "application/json");

    InputStream inputStream = null;
    String result = null;
    try {
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();

        inputStream = entity.getContent();
        // json is UTF-8 by default
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();
        Log.i(TAG, "readline : "+reader.readLine());            String line = null;
        while ((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");
            Log.i(TAG, "printLine: "+line);
        }
        result = sb.toString();
        JSONObject jObject = new JSONObject(result);
        JSONArray jArray = jObject.getJSONArray("0"); //I BELIVE THIS IS THE ERROR BUT UNCLEAR HOW TO FIX IT
        for (int i=0;i < jArray.length(); i++)
        {
            try {
                JSONObject oneObject = jArray.getJSONObject(i);
                // Pulling items from the array
                int oneObjectsItem = oneObject.getInt("drinks_id");
                String oneObjectsItem2 = oneObject.getString("drink_name");
                String oneObjectsItem3 = oneObject.getString("Description");
                Log.i(TAG, "parseJson: "+oneObjectsItem2);
            } catch (JSONException e) {
                Log.e(TAG, "parseJson1: " +e.getMessage() );
            }
        }
    } catch (Exception e) {
        Log.e(TAG, "parseJson2: "+e.getMessage() );
    }
    finally {
        try{
            if(inputStream != null)
                inputStream.close();}catch(Exception squish){
            Log.e(TAG, "parseJson3: "+squish.getMessage() );
        }
    }
}

Log Cat 样本(只打印一行?)

E/Menu: parseJson2: Value {"drinks_id":"1","drink_name":"Uprising Treason West Coast IPA","Description":"Beer"} at 0 of type org.json.JSONObject cannot be converted to JSONArray

【问题讨论】:

  • 你没有JSONArray,你有JSONObject。如果您将 JSON 更改为以 [] 开头和结尾并删除 "0""1" 等,我相信您的代码应该可以工作

标签: php android json


【解决方案1】:

尝试这种方式在php中创建关联数组,

<?php
   $object=array();
   $i=0;
   while($i<10){
     $employee = array("name"=>"hassan", "Designation"=>"Software Engineer");
     $i++;
     $object[]=$employee;
   }
   $orginal["data"]=$object;
   echo json_encode($orginal)
?>

输出将是

{"data":[{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"},{"name":"hassan","Designation":"Software Engineer"}]}

【讨论】:

  • 谢谢,明天我在的时候看看
  • 听起来不错。编码愉快。
猜你喜欢
  • 2014-08-14
  • 1970-01-01
  • 2012-11-24
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
相关资源
最近更新 更多