Php数组的Php json字符串对象

Php数组的Php json字符串对象,php,arrays,json,string,Php,Arrays,Json,String,我已经了解了如何将密钥封装在引号中,但我的数据没有,例如: 下面的数据保存在一个.txt文件中,我正在使用file\u get\u contents()读取这些文件,我无法控制下面的数据 这是我的数据 "{ ip : "192.168.1.110", startFrame : "1", endFrame : "11", startedCurrentFrameAt: "1397529891", status: "rendering", current

我已经了解了如何将密钥封装在引号中,但我的数据没有,例如:

下面的数据保存在一个.txt文件中,我正在使用
file\u get\u contents()
读取这些文件,我无法控制下面的数据

这是我的数据

"{
    ip : "192.168.1.110",
    startFrame : "1",
    endFrame : "11",
    startedCurrentFrameAt: "1397529891",
    status: "rendering",
    currentFrame: "0"
}"
在php中,我希望能够读取这些数据,并访问每个键,这就是我所尝试的:

$arr = json_decode($data, true)['status'];
$arr只返回null,因为键没有被引用,是否有解决方法

我已经找到了这个问题的许多答案,但都引用了答案。

试试这个

<?php
 function fix_json($s) {
  $s = preg_replace('/(\w+):/i', '"\1":', $s);
  return $s;
}


$data = '{
    ip: "192.168.1.110",
    startFrame: "1",
    endFrame: "11",
    startedCurrentFrameAt: "1397529891",
    status: "rendering",
    currentFrame: "0"
}';

$valid_json = fix_json($data);
$arr = json_decode($valid_json , true);
$status = $arr['status'];

echo $status;

我会使用函数来实现这一点。Explode类似于javascript的.split函数,它将获取一个字符串并将其分解为一个可用数据数组

因此,类似这样的方法应该可以工作,但是您需要首先删除两端的“{和}”:

// lets assume that your data is $mydata, for brevity's sake.
$mydata_arr = new Array();
$item_arr = new Array();
$newdata_arr = new Array();

$mydata_arr = explode(',',$mydata); // explode where there is a comma

foreach($item in $mydata_arr){
    $item_arr = explode(':',$item); // explode where there is a colon
    // this gives us keys and values in a the $item_arr at [0] and [1]
    $key = $item_arr[0];
    $value = $item_arr[1]; 

    // reassign these in a new, usable array     
    $newdata_arr[$key] = $value;
}
现在,我知道这是粗鲁和不雅的,但我想用一种能帮助你明白需要用英语这样的语言做什么的方式来解释。我希望它有帮助。

用于此。
那么代码中发生了什么? 首先,正则表达式试图查找空格和
之间的条目,然后将它们周围的引号连接起来。最后,一个
str_replace()
充当一个包装器来修复JSON大括号

<?php

$json='"{
    ip : "192.168.1.110",
    startFrame : "1",
    endFrame : "11",
    startedCurrentFrameAt: "1397529891",
    status: "rendering",
    currentFrame: "0"
}"';

function cb_quote($v)
{
    return '"'.trim($v[1]).'":';
}
$newJSON=str_replace(array('"{','}"'),array('[{','}]'),preg_replace_callback("~ (.*?):~","cb_quote", $json));
echo $arr = json_decode($newJSON, true)[0]['status'];

通过文件。。(编辑)
您是在生成JSON还是从某处获取JSON?是否也可以添加JSON生成的代码?来自2.2。对象对象结构表示为围绕零个或多个名称/值对(或成员)的一对花括号。名称是一个字符串。从2.5开始。字符串字符串以引号开头和结尾。因此,从技术上讲,这些都是json不支持的对象。钥匙必须是我的friend@ShankarDamodaran我已经编辑了我的问题,我基本上是在读一个自动填充数据的txt文件。@AwladLiton我没有生成对象,它是通过一个我没有创建/管理的.txt自动拉入的。请阅读我的整个问题,我无法控制键周围的引号,除非我使用正则表达式添加它们。我的对象用“not”包装,这有什么关系?除非它是单引号而不是双引号,否则它似乎不起作用。我最终实现了这一点,但它不起作用,因为我的数据
键中有空格:“s”
,我使用了另一个表达式来删除分号前的任何空格,它起作用了。我不知道在哪里,但我相信在某个地方出现了错误,我无法实现这一点:(你删除了起始位和结束位了吗?那会把事情搞砸的。我仍然是空的,我不能像你一样定义$json变量,为了尝试和复制,我会写这个
$json=“””“$data.”“;
?。如果你是从文本文件中得到它,只需做…
$json=trim(file\get\u contents('yourjsonfile.txt');
newJSON已经定义,但是如果我只是像这样返回
$arr
returnjson\u decode($newJSON,true)
它是空的…你到底为什么要使用
return
?你是在
函数中还是什么?我觉得它的字符串格式不对,我刚刚在newJSON中看到它的格式是这样的:
“{ip”“:”“192.168.1.110”,startFrame:“1”,endFrame:“11”,startedCurrentFrameAt:“1397529891”,status:“rendering”,currentFrame:“0”}“
rendering
<?php
$json = trim(file_get_contents('new.txt'));
//Modifications..
$json = str_replace(array('{','}',':',','),array('[{" ',' }]','":',',"'),$json);
function cb_quote($v)
{
    return '"'.trim($v[1]).'"';
}
$newJSON=preg_replace_callback("~\"(.*?)\"~","cb_quote", $json);
echo $arr = json_decode($newJSON, true)[0]['status']; //"prints" rendering