为什么我不能在数组中使用点?

时间:2016-07-07 18:11:01

标签: php json

我想尝试使用公司的API。我想把他们的数据放到我的数据库中。但是我遇到了一个问题。 API有一个名为" venue.country"的JSON对象。但出于某种原因,我不能在阵列中使用点?

以下是代码:

def banded_txns(s):
    return ((s >= 900.00) & (s < 1000.00)).count()

\其他一切都在PHP中运行 这是JSON的一部分:

    foreach ($data[1]['hits']['hits'] as $row) {
        $statement->execute(array(
            "name" => $row['fields']['name'][0],
            "date" => $row['fields']['start'][0],
            "lang_long" => "test",
It is this one! -> "country" => $row['fields']['venue.country'][0],
            "genres" => $row['fields']['genres'][0],
            "desc" => $row['fields']['description'][0],
            "logo" => $row['fields']['logo'][0],
            "header_pic" => $row['fields']['header'][0]
        ));
    }

我怎样才能让它发挥作用?我可以使用&#34; explode&#34;方法

这是完整的JSON: https://hugo.events/genre/pop/next/200/120

感谢。

编辑: 即使答案@Prototype Chain给出了这个错误:venue.country: [ "Nederland" ],

4 个答案:

答案 0 :(得分:1)

考虑到您的示例JSON数据,此代码可以正常工作:

$string = <<<EOT
  {INSERT YOUR JSON STRING HERE}
EOT;

$json = json_decode( $string, true );
echo $json[1]['hits']['hits'][0]['fields']['venue.location'][0] . "\n";
echo $json[1]['hits']['hits'][0]['fields']['venue.location'][1] . "\n";

答案 1 :(得分:0)

在没有看到JSON数据的全部内容的情况下调试有点困难,但是,过去当我从奇怪地格式化它的源解析JSON或XML数据时遇到困难时,我发现在解析数据之前对数据执行预处理str_replace()很有用。

所以这样的事情对你有用:

$input = some_function_to_get_string_data_from_api();
$input = str_replace( "venue.country", "venuecountry", $input );
$json  = json_encode( $input );

它不是一个优雅的解决方案,如果您处理需要修改的大量字段,但如果您只处理单个字段或两个字段,它会很快崩溃这给你带来麻烦,它可能是一个快速而肮脏的补丁。

答案 2 :(得分:0)

代码工作正常。调试后我发现,数组元素$ data [1] [&#39;点击&#39;] [&#39;点击&#39;] [50]和$ data没有键/索引venue.country [1] [&#39;命中&#39;] [&#39;命中&#39;] [51]。由于没有索引,因此抛出通知。

您可以添加@before变量以禁止通知,或者在索引出现时检查条件。

"country" => @$row['fields']['venue.country'][0],

"country" => isset($row['fields']['venue.country']) ? $row['fields']['venue.country'][0] : '',

//运行此代码进行测试。

error_reporting(E_ALL);
ini_set('display_errors', 1);
$jsondata = file_get_contents('https://hugo.events/genre/pop/next/200/100');
$data     = json_decode($jsondata, true);
foreach ($data[1]['hits']['hits'] as $row) {
   // echo $row['fields']['name'][0].'=>'.@$row['fields']['venue.country'][0].'<br/>';
   $array[]= array(
        "name" => $row['fields']['name'][0],
        "country" => isset($row['fields']['venue.country']) ? $row['fields']['venue.country'][0] : ''
        );
}
echo "<pre>";
print_r($array);

答案 3 :(得分:-2)

希望这会成功。

$row['fields']['venue']['country'][0]