0

这似乎是一个愚蠢的问题,但经过长时间的搜索,我被难住了。

我正在使用查询来检索数据,然后编码为 JSON,以便在我的站点周围的各个地方使用。只有一个问题。我似乎无法检索数据!

查询(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'];
                }
            }
4

4 回答 4

2

PHP >= 5.4 具有 JSON_PRETTY_PRINT 选项,如此处所述:http://php.net/manual/en/function.json-encode.php获得格式良好的 JSON 字符串:

json_encode($arr, JSON_PRETTY_PRINT);
于 2013-02-19T08:39:28.917 回答
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;
}

这可能对你有帮助........

于 2013-02-19T08:48:00.113 回答
1

我相信,您的问题出在其他地方,json_decode不需要换行符。但是,我发现这条线很可疑:

json_decode(file_get_contents("../data/data.users.php"),true);

您想以 JSON 格式读取 PHP 脚本吗?这是源代码,那里没有任何执行!

更新:

就像我怀疑的那样:您读取 PHP 文件并将其传递给json_decode. PHP 源代码不是有效的 JSON,因此它返回null. file_get_contents只有使用 http 包装器才有可能:

file_get_contents("http://example.com/data/data.users.php")

但这是不必要的复杂,通常不是一个好主意。此外,该脚本必须位于公共 Web 目录下。你应该包括 data.users.php. 为此,您有两种选择:

  1. 更改echoreturn然后使用:

    $arr = json_decode(include("../data/data.users.php"), true);
    
  2. 使用输出缓冲:

    ob_start();
    include("../data/data.users.php");
    $arr = json_decode(ob_get_clean(), true);
    

第一个选项应该是首选选项,但是,如果data.users.php由于某种原因无法更改,则第二个选项是有效的解决方法。

PS:您可能也想摆脱对的调用header(),如果data.users.php不会直接通过网络调用。否则,如果第二个脚本没有将 JSON 传递给浏览器/客户端,请记住覆盖内容类型标头。

于 2013-02-19T08:42:48.507 回答
0
echo json_encode($arr)."\r\n";
于 2013-02-19T08:41:57.510 回答