0

これはばかげた質問のように思えるかもしれませんが、長い検索の後、私は困惑しています。

クエリを使用してデータを取得し、サイトのさまざまな場所で使用するために JSON にエンコードしています。1つだけ問題があります。データを取得できないようです。

クエリ (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 文字列を取得するための JSON_PRETTY_PRINT オプションがあります: http://php.net/manual/en/function.json-encode.php :

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);

PHP スクリプトを JSON として読みたいですか? これはソース コードです。そこでは何も実行されません。

アップデート:

それはまさに私が思った通りです: PHP ファイルを読み込んで に渡しますjson_decode。PHP ソース コードは有効な JSON ではないため、null. file_get_contentshttpラッパーでのみ可能です:

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

しかし、それは不必要に複雑であり、一般的には良い考えではありません。また、スクリプトはパブリック Web ディレクトリの下にある必要があります。を含める 必要がありますdata.users.php。これには、次の 2 つのオプションがあります。

  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何らかの理由で変更できない場合は、2 番目のオプションが有効な回避策です。

PS: Web 経由で直接呼び出されないheader()場合は、への呼び出しも削除することをお勧めします。data.users.phpそれ以外の場合、JSON がブラウザー/クライアントに配信されない場合は、2 番目のスクリプトで content-type ヘッダーをオーバーライドすることを忘れないでください。

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