2012-12-18 35 views
0

我不熟悉PHP和JSON,但需要它用于我的Android项目。JSON编码的最佳格式?

我很困惑哪个JSON格式是最有效的。大多数例子我看到通过使用此代码使用关联阵列:

$result = mysql_query($queryString) 
while($row = mysql_fetch_assoc($result)){ 
    $json['contact']['ID'] = $row['ID']; 
    $json['contact']['Name'] = $row['Name']; 
} 

格式#1

{"contact":{"ID":"1","Name":"Andy"}} 

我喜欢这样的格式,但我不知道如何使每个键容纳更多比一个值。所以当我的查询返回AndyBob,json将只包含Bob

然后,我发现这个PHP代码:

while($row = mysql_fetch_row($result)){ 
    $json['contact'][] = $row; 
} 
echo json_encode($json); 

它使JSON看起来是这样的:

格式#2

{"contact":[["1","Andy"],["2","Bob"]]} 

但是在Android中,没有JSONObject方法至getArray()。即使有,我也想避免使用编号为的编号为的数组,要求调用[0][1]

那么,哪一个更好?还是其他的选择?

感谢

+2

** Heads up!** PHP的下一个主要版本是*弃用* mysql_'系列函数。现在将是[切换到PDO](http://php.net/book.pdo)或[mysqli](http://php.net/book.mysqli)的好时机。 – Charles

+0

@Charles谢谢,可以'mysqli_result :: fetch_array'采用与'mysql_fetch_array'相同的参数吗?我对PHP很陌生,所以我不太理解文档 – hrsetyono

+1

相同的参数,不同的顺序 - 连接*总是*在mysqli_中首先出现。如果你打算使用mysqli而不是PDO,一定要阅读[mysqli prepared statements的文档](http://php.net/mysqli.quickstart.prepared-statements)。他们比PDO中的使用者更加痛苦。 – Charles

回答

2

这并不是说一种方法比另一种更“有效”,它们服务于不同的目的。一个是关联对象,另一个是索引数组。

就你而言,它看起来像你想要的对象列表(索引数组)。所以我会建议做的是:

$result = mysql_query($queryString) 
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){ 
    $json['contact'][] = $row; 
} 
echo json_encode($json); 

这将导致在JSON:

{"contact":[{"ID":"1","Name":"Andy"}, {"ID":"2","Name":"Bob"}]} 
+0

谢谢,它的工作原理。但在Android中,我使用getJSONArray()而不是getJSONObject()方法来读取它吗?谢谢 – hrsetyono

+1

我以前没有用过android,但是我的猜测是你调用'JSONArray people =(new JSONObject(json_str))。getJSONArray(“contact”)'然后在循环中迭代调用'people.getJSONObject (i)' – Supericy

+0

谢谢,我会试试看。 – hrsetyono

1

为什么不能用mysql_fetch_array(); ?

+0

我尝试使用'mysql_fetch_array()',但它返回同一行两次。所以它给了我'{“contact”:[[“1”,“Andy”],[“1”,“Andy”]]}' – hrsetyono

+0

刚刚意识到我用了'mysql_fetch_array()'错误的方式。我跟着超级回答,它的工作 – hrsetyono

1
{"contacts":[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]} 

与包含接触阵列的主要联系人的对象也许对象?

+0

不知道我们可以做到这一点。我遵循了supericy代码,它工作。谢谢 – hrsetyono

0

你也可以做到硬编码(不如mysql_fetch_array()寿)。

$result = array(); 
$i = 0; 
while(...) { 
    $result[] .= '{"id":"'.$i.'","name":"'.$fetch['name'].'"}'; 
    $i++; 
} 
echo "[".implode(',', $result)."]"; 
+0

感谢您的回答。但我会使用超级代码,因为它的工作原理和看起来更干净 – hrsetyono