【问题标题】:How to decode json in php coming from android json post volley如何在来自android json post volley的php中解码json
【发布时间】:2016-01-27 00:26:22
【问题描述】:

Gooday 对不起我的英语不好和编程新手。我正在尝试解码从 android volley JSON POST 抛出的 JSONObject。现在我可以从 Android 收到来自服务器的响应,我可以通过 TOAST 确认。我的问题是如何使用 PHP 从服务器端正确解码 JSON。此 JSON 数据将用于在 MySQL 中插入新数据。我只是不知道正确的方法并且很难找到解码设置的答案。请您在这里提供任何建议。

public void testOrder (ArrayList<String> order_id,
                                      ArrayList<String> uname,
                                      ArrayList<String> prod_name,
                                      ArrayList<String> prod_id,
                                      ArrayList<String> quantity,
                                      ArrayList<String> branches,
                                      ArrayList<String> totalPrice,
                                      int itemIteration){
        JSONObject obj = null;
        JSONArray jsonArray = new JSONArray();
        final JSONObject finalobject = new JSONObject();
        for (int i = 0; i < itemIteration; i++) {
            obj = new JSONObject();
            Log.d("OBJECT_COUNTER", String.valueOf(i));
            try {
                obj.put("order_id",  order_id.get(i));
                Log.d("ORDER_ID",    order_id.get(i));
                obj.put("uname",     uname.get(i));
                Log.d("USERNAME",    uname.get(i));
                obj.put("prod_name", prod_name.get(i));
                Log.d("PROD_NAME",   prod_name.get(i));
                obj.put("quantity",  quantity.get(i));
                Log.d("PROD_QUANT",  quantity.get(i));
                obj.put("branch",    branches.get(i));
                Log.d("PROD_BRANCHES", branches.get(i));
                obj.put("totalPrice",  totalPrice.get(i));
                Log.d("TOTAL_PRICE",   totalPrice.get(i));
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            jsonArray.put(obj);
        }
            try {
                finalobject.put("ORDER_LIST", jsonArray);
                test = jsonArray.toString();
//                Toast.makeText(this,test,Toast.LENGTH_SHORT).show();
            } catch (JSONException e) {
                e.printStackTrace();
            }

        StringRequest strRequest = new StringRequest(Request.Method.POST, Config.TRY_JSON_POST,
                new Response.Listener<String>()
                {
                    @Override

                    public void onResponse(String response)
                    {
                        Toast.makeText(PlaceOrder.this, response, Toast.LENGTH_SHORT).show();
//                       
                    }
                },
                new Response.ErrorListener()
                {
                    @Override
                    public void onErrorResponse(VolleyError error)
                    {
                        Toast.makeText(PlaceOrder.this, error.toString(), Toast.LENGTH_SHORT).show();
                    }
                })
        {
            @Override
            protected Map<String, String> getParams()
            {
                Map<String, String> params = new HashMap<>();
                params.put("tag", finalobject.toString());
//                String obj = finalobject.toString();
//                Toast.makeText(PlaceOrder.this,obj,Toast.LENGTH_SHORT).show();
                return params;
            }
        };
        AppController.getmInstance().addToRequesQueue(strRequest);
    }
}

PHP 代码

<?php 
if($_SERVER['REQUEST_METHOD']=='POST'){

$response = array("ORDERLIST" => $_POST["tag"]);
//$response = array($_POST["tag"]);
//$my_array = json_decode($response,true);

echo json_encode(str_replace('\"','"',$response));

     echo "RECEIVED";

} else{

       echo "nothing";
}

我使用 Log.d 作为响应:

D/回应:

{"ORDERLIST":"{\"ORDER_LIST\":[{\"order_id\":\"1755\",\"uname\":\"jordan\",\"prod_name\":\"ABC\",\"quantity\":\"1\",\"branch\":\"Dapitan\",\"totalPrice\":\"23500\"},{\"order_id\":\"1755\",\"uname\":\"jordan\",\"prod_name\":\"AMD Kaveri A4-7300 APU HD8470D 2-Core 2GB 500GB CPU Package\",\"quantity\":\"1\",\"branch\":\"Dapitan\",\"totalPrice\":\"23500\"}]}"}

使用 echo $content 后,这会显示在我的 toast 上

D/Response: DATA:tag=%7B%22ORDER_LIST%22%3A%5B%7B%22order_id%22%3A%221755%22%2C%22uname%22%3A%22jordan%22%2C%22prod_name%22%3A%22ABC%22%2C%22quantity%22%3A%221%22%2C%22branch%22%3A%22Dapitan%22%2C%22totalPrice%22%3A%2223500%22%7D%2C%7B%22order_id%22%3A%221755%22%2C%22uname%22%3A%22jordan%22%2C%22prod_name%22%3A%22AMD+Kaveri+A4-7300+APU+HD8470D+2Core+2GB+500GB+CPU+Package%22%2C%22quantity%22%3A%221%22%2C%22branch%22%3A%22Dapitan%22%2C%22totalPrice%22%3A%2223500%22%7D%5D%7D&

编辑的 PHP 代码

if($_SERVER['REQUEST_METHOD']=='POST'){

$content   = file_get_contents( "php://input" );
$response  = json_decode($content,TRUE);
$orderlist = json_decode($response['ORDER_LIST'], TRUE);

//echo $orderlist[0][order_id][0];

echo "DATA: ";

foreach($orderlist AS $row ){
  echo $row[uname];
} 

      echo $response;
} else{
      echo "nothing";
}

【问题讨论】:

  • json 编码的响应在哪里?在数组$response['ORDERLIST']?
  • 我好像还不能添加照片。我可以使用 Android 的 toast 来验证响应。
  • 好的,我现在已经编辑了我的帖子并使用 Log.d 发布了响应,你能帮我弄清楚如何在 php 端解码它吗?非常感谢您的帮助,并提前感谢您。
  • 如果我的答案有效,请告诉我(我在许多项目中使用它,但不适用于 Android):否则我会删除它!

标签: php android json


【解决方案1】:

(已编辑)

试试这个:

$content   = file_get_contents( "php://input" );
$response  = json_decode( $content, TRUE );
$orderlist = json_decode( $response['ORDERLIST'], TRUE );

来自 PHP 文档:

php://input 是一个只读流,允许您从请求正文中读取原始数据。对于 POST 请求,最好使用 php://input 而不是 $HTTP_RAW_POST_DATA,因为它不依赖于特殊的 php.ini 指令。

解码json数据后,在$orderlist中得到一个关联数组。您现在可以选择将您喜欢的数组值保存到数据库中。

所以(即):$orderlist[0][order_id]$orderlist[1][uname]

【讨论】:

  • 我尝试回显 $orderlist 和 $response,但除了收到的回显响应外,我没有得到任何值。我不知道我做的是否正确。我也尝试回显 $orderlist[0][order_id],但没有显示来自 Android 的任何内容。你能给我一个关于如何访问这些解码数据并回显它的代码,以便我可以进行更多验证。
  • 这些解码数据是通过json_decode( $content, TRUE )获得的; $content 被假定为您的“回声”响应。 “回响”如何?基本仍然是如何捕获原始 json 数据:file_get_contents( "php://input" )$_POST 都不起作用?
  • 我收到了使用 echo $content 的 toast 响应,请参阅我的编辑帖子。这是我第一次从 Android 编写 JSON 代码,将其传递给 PHP 以插入新数据。所以捕获原始的json数据基本上我还不知道。
  • 但您尝试过使用file_get_contents( "php://input" )
  • @overdrive 您无法回显数组。您只会收到“Array ( )”。如果要转储数组以查看结构,请使用var_dump()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2017-11-14
  • 2019-12-19
相关资源
最近更新 更多