【问题标题】:Javascript Object (string format) to PHP ArrayJavascript 对象(字符串格式)到 PHP 数组
【发布时间】:2013-04-21 11:59:54
【问题描述】:

我有数以千计的 javascript 对象格式的文本文件(不是 JSON),如下格式; 由于它们不是 json,json_decode 函数不适用于它们。谷歌搜索不是很有帮助,而我发现的每一篇文章都是关于 PHP 到 JSO 的:(

{
guid:205, 
      data:{something:"value",
            anotherthing :0,
            thingy: "another value"},
      anotherdata:[[563, "value", 1],
            [564, "value2", 5],
            [565, "value3", 125]],
      onemore:["key", "value"]
}

我需要通过PHP 达到这个值,但找不到解决方案:(

$str = ??? /any function, class etc.
echo $str->data->thingy; // another value;

echo $str['anotherdata'][2][1] // value3;

有什么想法吗?

【问题讨论】:

  • 通过查看类似的问题。这不是一个可以用正则表达式简单解决的问题。 stackoverflow.com/questions/4843746/…
  • 你给的js代码怎么不是json?
  • 好吧,也许是 [] 数组表示法?
  • @Anchshar,它可能看起来像 json 代码,实际上我认为它是 4-5 小时的 json :),但它不是有效的 json。所以这就是问题所在。我也没有机会编辑它。 :(

标签: php javascript-objects


【解决方案1】:

也许您可以解析纯文本以修复在对象键中添加丢失的双引号的字符串。比如:

$str = '{
guid:205, 
  data:{something:"value",
        anotherthing :0,
        thingy: "another value"},
  anotherdata:[[563, "value", 1],
        [564, "value2", 5],
        [565, "value3", 125]],
  onemore:["key", "value"]
}';

$str = preg_replace('/(\w+)\s{0,1}:/', '"\1":', str_replace(array("\r\n", "\r", "\n", "\t"), "", $str));
$array_data = json_decode($str);

这将修复 JSON 格式错误的字符串,您将能够对其进行解码。坏事可能是某些元素的值包含一个带有一个单词后跟一个冒号的文本(即whateverword:)

【讨论】:

    【解决方案2】:

    您是否知道您的示例文本是一种 JSON 字符串?可以通过json_decode进行转换。

    请看http://php.net/json_decode

    【讨论】:

    • 你读过问题的开头吗? “我有成千上万个类似以下格式的 javascript 对象格式的文本文件(不是 JSON);由于它们不是 json,json_decode 函数不适用于它们。”
    • The json_decode documentation 表示 JSON 的对象键必须双引号。抱歉,json_decode 不起作用。
    • @FelixKling 你能解释一下JSON字符串和javascript对象格式文本文件的区别吗???
    • 正如 michaelb958 已经说过的,键必须是字符串(即双引号)才能使其成为有效的 JSON。
    猜你喜欢
    • 2012-10-08
    • 2013-03-29
    • 2013-11-23
    • 2017-08-27
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多