这可能看起来像一个愚蠢的问题,但经过长时间的搜索,我很难过。
我正在使用查询来检索数据,然后编码为JSON,以便在我的网站周围的各个地方使用。只有一个问题。我似乎无法检索数据!
Query(data.users.php):
$arr = array();
$rs = mysql_query("SELECT
CONCAT(m.firstName,' ',m.lastName) AS name,
m.email,
m.permission,
m.costRate,
m.dt,
m.memberID,
m.moduleFinancial,
o.orgName
FROM members m
LEFT JOIN organisations o ON m.organisationID = o.organisationID
WHERE status = 'true'
ORDER BY name"
) or die(mysql_error());
while($obj = mysql_fetch_object($rs)) {
$arr[] = $obj;
}
header("Content-type: application/json");
echo json_encode($arr);
数据示例:
[{"name":"Admin User","email":"test@test.com","permission":"admin","dt":"2013-02-02 10:26:29","memberID":"M0000001"},{"name":"Another User","email":"another@test.com","permission":"admin","dt":"2012-02-02 10:26:29","memberID":"M0000002"}]
有什么想法吗?
更新了提取代码:
ob_start();
include("../data/data.users.php");
$arr = json_decode(ob_get_clean(), true);
foreach($arr as $item) {
if ($item['memberID'] == $_GET["ID"]) {
$user_name = $item['name'];
}
}
答案 0 :(得分:2)
PHP> = 5.4具有JSON_PRETTY_PRINT选项,如下所示:http://php.net/manual/en/function.json-encode.php以获得格式良好的JSON字符串:
json_encode($arr, JSON_PRETTY_PRINT);
答案 1 :(得分:1)
我相信,你的问题出在其他地方,json_decode
不需要换行符。但是,我发现这条线可疑:
json_decode(file_get_contents("../data/data.users.php"),true);
您想将PHP脚本作为JSON读取吗?这是源代码,没有任何内容在那里执行!
<强>更新强>
这与我怀疑的完全一样:您阅读PHP文件并将其传递给json_decode
。 PHP源代码无效JSON,因此返回null
。 file_get_contents
只能通过http包装器实现:
file_get_contents("http://example.com/data/data.users.php")
但这是不必要的复杂,通常不是一个好主意。此外,该脚本必须位于公共Web目录下。您应该包含 data.users.php
。为此,您有两种选择:
将echo
更改为return
,然后使用:
$arr = json_decode(include("../data/data.users.php"), true);
使用输出缓冲:
ob_start();
include("../data/data.users.php");
$arr = json_decode(ob_get_clean(), true);
第一个选项应该是首选选项,但是,如果由于某种原因无法更改data.users.php
,则第二个选项是有效的解决方法。
P.S。:如果header()
不会直接通过网络调用,您可能也希望摆脱对data.users.php
的调用。否则,请记住在第二个脚本中覆盖内容类型标头,如果它没有向浏览器/客户端提供JSON。
答案 2 :(得分:1)
亲爱的......
输入
{"key1":[1,2,3],"key2":"value"}
输出
{
"key1": [
1,
2,
3
],
"key2": "value"
}
功能代码:
function prettyPrint( $json )
{
$result = '';
$level = 0;
$prev_char = '';
$in_quotes = false;
$ends_line_level = NULL;
$json_length = strlen( $json );
for( $i = 0; $i < $json_length; $i++ ) {
$char = $json[$i];
$new_line_level = NULL;
$post = "";
if( $ends_line_level !== NULL ) {
$new_line_level = $ends_line_level;
$ends_line_level = NULL;
}
if( $char === '"' && $prev_char != '\\' ) {
$in_quotes = !$in_quotes;
} else if( ! $in_quotes ) {
switch( $char ) {
case '}': case ']':
$level--;
$ends_line_level = NULL;
$new_line_level = $level;
break;
case '{': case '[':
$level++;
case ',':
$ends_line_level = $level;
break;
case ':':
$post = " ";
break;
case " ": case "\t": case "\n": case "\r":
$char = "";
$ends_line_level = $new_line_level;
$new_line_level = NULL;
break;
}
}
if( $new_line_level !== NULL ) {
$result .= "\n".str_repeat( "\t", $new_line_level );
}
$result .= $char.$post;
$prev_char = $char;
}
return $result;
}
这对你有帮助........
答案 3 :(得分:0)
echo json_encode($arr)."\r\n";