从JSON中选择属性

时间:2016-01-28 11:05:12

标签: php mysql json

我有一个类似于这个的JSON:

    {"request":
{"Target":"Affiliate_Offer","Format":"json","Service":"HasOffers","Version":"2","NetworkId":"adattract","Method":"getPayoutDetails","api_key":"bd2e82f029c50b582db85868b7c0b8ab99d095886ab079f87b464bb68486c891","offer_id":"9463"},"response":
    {"status":1,"httpStatus":200,"data":{"offer_payout":
    {"payout":"0.820"}},"errors":[],"errorMessage":null}}

我想只选择payout 0.820的值。

这是我尝试的内容

<?php
include 'db.php';
$result = mysql_query("SELECT * FROM ada  WHERE require_approval='0' ORDER BY i2 ASC LIMIT 0,10") or die(mysql_error());
// keeps getting the next row until there are no more to get
while ($row = mysql_fetch_array($result)) {
  echo "<div>";
  $r = $row['id'];
  $ri = $row['i2'];
  // $ri contains no. 1 2 3 4 5..//
  $json = '';
}
$mydata = json_decode($json, true);
$data = $mydata["response"]["data"];
$pay = $data[$ri]["offer_payout"][payout];
echo "</div>";
mysql_query("INSERT INTO thumb(img,id) VALUES('$nth','$oid')");
echo $pay; //output of 0.8200 but not work plz here i need help//
}
?>

5 个答案:

答案 0 :(得分:3)

妄想'给一个人一条鱼,他将养活他的家人一天。教一个人钓鱼,他将永远养活他的家人'这里是你如何找出一个json对象的样子。

$json = '{"request":
{"Target":"Affiliate_Offer","Format":"json","Service":"HasOffers","Version":"2","NetworkId":"adattract","Method":"getPayoutDetails","api_key":"bd2e82f029c50b582db85868b7c0b8ab99d095886ab079f87b464bb68486c891","offer_id":"9463"},"response":
{"status":1,"httpStatus":200,"data":{"offer_payout":
{"payout":"0.82000"}},"errors":[],"errorMessage":null}}';


$mydata = json_decode($json,true);
print_r($mydata);

将输出: -

Array
(
    [request] => Array
        (
            [Target] => Affiliate_Offer
            [Format] => json
            [Service] => HasOffers
            [Version] => 2
            [NetworkId] => adattract
            [Method] => getPayoutDetails
            [api_key] => bd2e82f029c50b582db85868b7c0b8ab99d095886ab079f87b464bb68486c891
            [offer_id] => 9463
        )

    [response] => Array
        (
            [status] => 1
            [httpStatus] => 200
            [data] => Array
                (
                    [offer_payout] => Array
                        (
                            [payout] => 0.82000
                        )

                )

            [errors] => Array
                (
                )

            [errorMessage] =>
        )

)

现在您知道如何处理任何和所有字段

所以你想要的字段是

$pay = $mydata["response"]["data"]["offer_payout"]["payout"];

现在您决定将JSON Object转换为array,没有必要这样做,并且在某些方面,对象更容易解决并且使用的键击次数少于数组。

所以请将,true退出json_decode,然后你就可以了。

$json = '{"request":
{"Target":"Affiliate_Offer","Format":"json","Service":"HasOffers","Version":"2","NetworkId":"adattract","Method":"getPayoutDetails","api_key":"bd2e82f029c50b582db85868b7c0b8ab99d095886ab079f87b464bb68486c891","offer_id":"9463"},"response":
{"status":1,"httpStatus":200,"data":{"offer_payout":
{"payout":"0.82000"}},"errors":[],"errorMessage":null}}';


$mydata = json_decode($json);
print_r($mydata);

哪些输出: -

stdClass Object
(
    [request] => stdClass Object
        (
            [Target] => Affiliate_Offer
            [Format] => json
            [Service] => HasOffers
            [Version] => 2
            [NetworkId] => adattract
            [Method] => getPayoutDetails
            [api_key] => bd2e82f029c50b582db85868b7c0b8ab99d095886ab079f87b464bb68486c891
            [offer_id] => 9463
        )

    [response] => stdClass Object
        (
            [status] => 1
            [httpStatus] => 200
            [data] => stdClass Object
                (
                    [offer_payout] => stdClass Object
                        (
                            [payout] => 0.82000
                        )

                )

            [errors] => Array
                (
                )

            [errorMessage] =>
        )

)

现在您想要解决的字段是: -

$pay = $mydata->response->data->offer_payout->payout;

答案 1 :(得分:1)

您可以从json获取值:

// your json
$json = '{"request":
{"Target":"Affiliate_Offer","Format":"json","Service":"HasOffers","Version":"2","NetworkId":"adattract","Method":"getPayoutDetails","api_key":"bd2e82f029c50b582db85868b7c0b8ab99d095886ab079f87b464bb68486c891","offer_id":"9463"},"response":
{"status":1,"httpStatus":200,"data":{"offer_payout":
{"payout":"0.82000"}},"errors":[],"errorMessage":null}}';

// json_decode() function with second param true for array format
$json_decoded = json_decode($json,true);

echo $json_decoded['response']['data']['offer_payout']['payout']; //0.82000

如何在代码中获得此功能?

您只需在代码中更改这两行:

$data = $mydata["response"]["data"];
$pay = $data["offer_payout"]['payout']; //0.82000

答案 2 :(得分:0)

$pay = $mydata["response"]["data"]["offer_payout"]["payout"];

您可能希望将其强制转换为float,因为它是您提供的JSON数据中的字符串:

$pay = (float) $mydata["response"]["data"]["offer_payout"]["payout"];

答案 3 :(得分:0)

首先,您需要将json转换为数组

$array =json_decode($json,TRUE); //$json is converted to array

现在您可以从数组中检索任何属性 完整的代码示例是

$json = '{"request":
{"Target":"Affiliate_Offer","Format":"json","Service":"HasOffers","Version":"2","NetworkId":"adattract","Method":"getPayoutDetails","api_key":"bd2e82f029c50b582db85868b7c0b8ab99d095886ab079f87b464bb68486c891","offer_id":"9463"},"response":
{"status":1,"httpStatus":200,"data":{"offer_payout":
{"payout":"0.82000"}},"errors":[],"errorMessage":null}}';

$mydata = json_decode($json,true);
print_r($mydata);

输出:

 Array ( [request] => Array ( [Target] => Affiliate_Offer [Format] => json [Service] => HasOffers [Version] => 2 [NetworkId] => adattract [Method] => getPayoutDetails [api_key] => bd2e82f029c50b582db85868b7c0b8ab99d095886ab079f87b464bb68486c891 [offer_id] => 9463 ) [response] => Array ( [status] => 1 [httpStatus] => 200 [data] => Array ( [offer_payout] => Array ( [payout] => 0.82000 ) ) [errors] => Array ( ) [errorMessage] => ) ) 1

从结果中您可以检索任何数组属性
例如 -

echo $mydata['response']['status'];

输出: 1

答案 4 :(得分:0)

希望这会对你有所帮助。

$mydata = json_decode($json, true);
$data = $mydata['response']['data'];
print_r($data);
print_r($data['offer_payout']['payout']);