从 Android 将 JSONArray 传递给 PHP

Posted

技术标签:

【中文标题】从 Android 将 JSONArray 传递给 PHP【英文标题】:Passing JSONArray to PHP from Android 【发布时间】:2011-11-22 03:56:26 【问题描述】:

我已经阅读了许多关于 php 和 JSONArray 循环的其他问题。我正在从我的 android 设备发送不同学生的 JSONArray 值以及他们的班级和学生 ID。使用这些值,我在数据库中搜索它们的名称并返回一个 JSONArray。

JSON Input: ["studentId":"2","class":"2a","dbname":"testDb"]
<?php

 $jsonString = $_POST['json'];  //see comment below

 $jArray = json_decode($jsonString, true);

 $conn = mysql_connect('localhost', 'user', 'pwd' );

mysql_select_db('dbname', $conn);

foreach( $jArray as $obj )
    $className = $obj['class'];   //String
    $id= $obj['studentId'];       //int

    $result = mysql_query("SELECT name FROM student WHERE class='$className' AND id='$id'");

    $e=mysql_fetch_assoc($result);    //will only fetch 1 row of result
    $output[]=$e;




      echo (json_encode($output));

?>

安卓

HttpClient client = new DefaultHttpClient();
HttpResponse response;
try
 HttpPost post = new HttpPost("http://abc/getName.php");
 List<NameValuePair> nVP = new ArrayList<NameValuePair>(2);  
 nVP.add(new BasicNameValuePair("json", studentJson.toString()));  //studentJson is the JSON input

//student.Json.toString() produces the correct JSON ["studentId":"2","class":"2a","dbname":"testDb"]

 post.setEntity(new UrlEncodedFormEntity(nVP));
 response = client.execute(post);
if(response!=null)
//process data send from php
  

已解决:请参阅下面的答案

【问题讨论】:

使用您的 JSONArray 输入和print_r($jArray); 的输出更新您的帖子 我刚刚运行了这个,但首先对其进行了简化。设置$jsonString = '["regNo":"2","class":"2a","dbname":"TestData"]' 然后在$id= $obj['studentId']; 之后我做了echo "SELECT name FROM student WHERE class='$className' AND id='$id'" 并且它起作用了。 (另外,我删除了对输出或 mysql 的任何引用)。尝试输出您的 JSON 对象(解码后)以确保它是一个数组,并且传入的 JSON 字符串没有格式错误。 正如@JasonMcCreary 之前所说,添加您获得的数据。将您的var_dump($jsonString);var_dump($jArray); 输出添加到帖子中。也许 $jArray 是 null 左右...... 谢谢大家,这就是问题所在,$jArray 为空... PHP 无法检索我的 JSONArray 输入 我已经编辑了我的问题以包含我在 JSONArray 输入中发送的部分 【参考方案1】:

已解决: 终于明白问题出在哪里了。从 Android 发布到 PHP 脚本后,我的 JSONArray 变为 [\"studentId\":"2\",\"class\":\"2a\",\"dbname\":\"testDb\"] 删除“\”,使用 PHP 命令 stripslashes 花了 4 小时调试!

希望这对于那些想要在 Android 和 PHP 之间发送和检索数据的人来说是一个很好的指南

【讨论】:

【参考方案2】:

这是你的问题:

print_r(json_decode('["regNo":"2","class":"2a","dbname":"TestData"]',true));

返回 Array ( [0] =&gt; Array ( [regNo] =&gt; 2 [class] =&gt; 2a [dbname] =&gt; TestData ) ) 表示你解码的 json 被放入一个数组中

使用array_shift(json_decode($jsonString, true)); 删除父数组。

【讨论】:

虽然这是一个很好的观点,但它并不能解释错误 Invalid argument for foreach() 因为它仍然应该循环父数组。

以上是关于从 Android 将 JSONArray 传递给 PHP的主要内容,如果未能解决你的问题,请参考以下文章

将 json 传递给包含 json 数组的服务器

在android中使用json数组值的android地图标记

将参数从 Android FragmentActivity 传递给 Fragment

Android:将参数从Activity传递给Service

通过@JavascriptInterface将字符串从Android传递给WebView中的JS

从 Android 获取带有 StringRequest 的 JSONArray