将多个json转换为php数组

时间:2017-12-30 09:19:44

标签: php arrays json

我有包含多个json对象的json文件。 实施例

{"t":"abc-1","d":"2017-12-29 12:42:53"}
{"t":"abc-2","d":"2017-12-29 12:43:05"}
{"t":"abc-3","d":"2017-12-30 14:42:09"}
{"t":"code-4","d":"2017-12-30 14:42:20"}

想要读取此文件并存储到数据库中,但我无法将json转换为php数组,我可以将其存储到数据库中。

我尝试了json_decode函数,但它不起作用。我搜索这个但是在每个链接中它显示使用json_decode。以下是我的代码

$filename = "folder/filename.json";
$data = file_get_contents($filename);
echo $data;
$tags = json_decode($data, true);
echo"<pre>";print_r($tags);exit;

$ data是回显但不是$ tag。

提前致谢。

6 个答案:

答案 0 :(得分:0)

如果只有四行,你可以爆炸并对每行进行json_decode并将其添加到数组中。

$s = '{"t":"abc-1","d":"2017-12-29 12:42:53"}
{"t":"abc-2","d":"2017-12-29 12:43:05"}
{"t":"abc-3","d":"2017-12-30 14:42:09"}
{"t":"code-4","d":"2017-12-30 14:42:20"}';

$arr = explode(PHP_EOL, $s);
Foreach($arr as $line){
    $json[] = json_decode($line,true);
}
Var_dump($json);

https://3v4l.org/97m0E

答案 1 :(得分:0)

一行中的多个对象应该用json数组括起来,并用逗号之类的元素分隔。所以你需要在文件的开头和结尾加一个[]。你也可以关闭预标记

您应该修复生成'json'的文件,或者您可以使用fgets一次获取一行,并在每行使用json decode

答案 2 :(得分:0)

正如其他人指出的那样,您分享的JSON无效。而且,我认为它以相同的方式存储在您的文件中。我建议逐行读取这个文件然后你可以解码。

$handle = fopen("folder/filename.json", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {

        $tags = json_decode($line, true);
        echo"<pre>";print_r($tags);exit;
    }

    fclose($handle);
} else {
    // error opening the file.
} 

答案 3 :(得分:0)

VTCompressionSessionEncodeFrame(…)

答案 4 :(得分:0)

制作对象数组并稍后使用

$j = array_map('json_decode', file('php://stdin'));
print_r($j);

demo

答案 5 :(得分:-1)

您的JSON无效,因为它有多个根元素

修复它应该有效(请注意[]和逗号):

[
    {"t":"abc-1","d":"2017-12-29 12:42:53"},
    {"t":"abc-2","d":"2017-12-29 12:43:05"},
    {"t":"abc-3","d":"2017-12-30 14:42:09"},
    {"t":"code-4","d":"2017-12-30 14:42:20"}
]

如果无法影响JSON文件的创建方式,则需要创建自己的阅读器,因为PHP不是为支持无效格式而构建的。您可以用新行分隔文件并分别解析每个文件。