1

我正在尝试使用 json_encode() 函数在 php 中制作 json 数据。然后我将在客户端使用这些数据。我完成了一部分。我当前的代码以这种格式显示 json 数据

{
"data":
{
    "tag":"home",
    "success":1,
    "error":0,
    "uid":"4fc8f94f1a51c5.32653037",
    "name":"Zafar Saleem",
    "profile_photo":"http:\/\/example.info\/android\/profile_photos\/profile1.jpg",
    "places":
    {
        "place_photo":"http:\/\/example.info\/android\/places_photos\/place1.jpg",
        "created_at":"2012-06-02 00:00:00",
        "seeked":"0"
    }
}
}
{
"data":
{
    "tag":"home",
    "success":1,
    "error":0,
    "uid":"4fc9c413554104.22444656",
    "name":"Name",
    "profile_photo":"http:\/\/example.info\/android\/profile_photos\/profile2.jpg",
    "places":
    {
        "place_photo":"http:\/\/example.info\/android\/places_photos\/place2.jpg",
        "created_at":"2012-06-03 00:00:00",
        "seeked":"0"
    }
}
}
{
"data":
{
    "tag":"home",
    "success":1,
    "error":0,
    "uid":"4fc9c48c529675.45551665",
    "name":"Name",
    "profile_photo":"http:\/\/example.info\/android\/profile_photos\/profile3.jpg",
    "places":
    {
        "place_photo":"http:\/\/example.info\/android\/places_photos\/place3.jpg",
        "created_at":"2012-06-04 00:00:00",
        "seeked":"20"
    }
}
}

我想以这种形式在上面的数据中显示什么

{
"data": 
[
    {
        "tag":"home",
        "success":1,
        "error":0,
        "uid":"4fc8f94f1a51c5.32653037",
        "name":"Zafar Saleem",
        "profile_photo":"http:\/\/example.info\/android\/profile_photos\/profile1.jpg",
        "places":
        {
            "place_photo":"http:\/\/example.info\/android\/places_photos\/place1.jpg",
            "created_at":"2012-06-02 00:00:00",
            "seeked":"0"
        }
    },
    {
        "tag":"home",
        "success":1,
        "error":0,
        "uid":"4fc9c413554104.22444656",
        "name":"Name",
        "profile_photo":"http:\/\/example.info\/android\/profile_photos\/profile2.jpg",
        "places":
        {
            "place_photo":"http:\/\/example.info\/android\/places_photos\/place2.jpg",
            "created_at":"2012-06-03 00:00:00",
            "seeked":"0"
        }
    },
    {
        "tag":"home",
        "success":1,
        "error":0,
        "uid":"4fc9c48c529675.45551665",
        "name":"Name",
        "profile_photo":"http:\/\/example.info\/android\/profile_photos\/profile3.jpg",
        "places":
        {
            "place_photo":"http:\/\/example.info\/android\/places_photos\/place3.jpg",
            "created_at":"2012-06-04 00:00:00",
            "seeked":"20"
        }
    }
]
}

这是我生成 json 数据的 php 代码

从数据库中获取数据的数据库函数

 public function getHome() {
    $result = mysql_query("SELECT * FROM places") or die(mysql_error());
    // check for result
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows > 0) {
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            $data[] = $row;
        }
        return $data;
        /*
        $result = mysql_fetch_array($result);
        return $result;
        */
    } else {
        // user not found
        return false;
    }
}

这是我在 php 上制作 json 的地方

if($db->getHome()) {
        $data = $db->getHome();
        foreach($data as $r) {
            $response['success'] = 1;
            $response['uid'] = $r['uid'];
            $response['name'] = $r['name'];
            $response['profile_photo'] = $r['profile_photo_path'];
            $response['places']['place_photo'] = $r['place_photo_path'];
            $response['places']['latitude'] = $r['latitude'];
            $response['places']['longitude'] = $r['longitude'];
            $response['places']['created_at'] = $r['created_at'];
            $response['places']['seeked'] = $r['total_completed'];
            echo json_encode(array('data' => $response));
        }
    } else {
        $response['error'] = 1;
        $response['error_msg'] = 'No data available';
        echo json_encode($response);
    }
4

2 回答 2

2

考虑使代码看起来像这样:

// this function turns a database row into data for frontend use
function convert_to_response($r)
{
  return array(
    'success' => 1,
    'uid' => $r['uid'],
    'name' => $r['name'],
    'profile_photo' => $r['profile_photo_path'],
    'places' => array(
      'place_photo' => $r['place_photo_path'],
      'latitude' => $r['latitude'],
      'longitude' => $r['longitude'],
      'created_at' => $r['created_at'],
      'seeked' => $r['total_completed'],
    ),
  );
}

if($db->getHome()) {
        $data = $db->getHome();
        echo json_encode(array(
            'data' => array_map('convert_to_response', $data) // convert data array
        ));
    } else {
        $response['error'] = 1;
        $response['error_msg'] = 'No data available';
        echo json_encode($response);
    }

您的代码自己回显每个数据行,这就是为什么您没有看到数组(使用方括号)。

通过将响应转换移动到单独的函数中,我还使您的代码更加清晰;这样,它可以被函数使用,例如array_map将一种格式的数据数组转换为另一种格式。

希望能帮助到你。

于 2012-06-02T15:16:18.737 回答
0

当我需要将 json 数据打印到客户端时,我所做的就是这样做。

print_json(array('logged'=>true),true);

print_json 函数将打印传入第一个对象的对象的 json 格式数据。我的第二个论点决定了我通常提供的是否死亡。

function print_json($data,$die){
    header('Content-Type: application/json; charset=utf8');
    print_r(json_encode($data));
    if ($die === true) die();
}

小菜一碟。希望你喜欢它,这是我多年来想出的最好的方法。

于 2012-06-02T15:46:53.317 回答