【问题标题】:json inside function, (php parsing)json内部函数,(php解析)
【发布时间】:2026-02-18 01:25:01
【问题描述】:

我在 *.txt 文件中有这样的东西。

function_name({"one": {"id": "id_for_one", "value": "value_for_one"}, ...});

我得到这样的文件:

$source = 'FILE_NAME.txt';
$json = json_decode(file_get_contents($source),true);
echo $json['one']['value'];

它不起作用,但是当我删除 function_name(); 时它起作用了。 如何在不删除这些字符串的情况下解析它?

【问题讨论】:

  • 你想达到什么目的?
  • 那应该是一个JS回调函数。
  • 你在搞什么鬼? json_decode() 用于解码 JSON 字符串。您给它的字符串不是 JSON 字符串。

标签: php json parsing


【解决方案1】:

你不能。它不是有效的 JSON。取一个排除它们的子字符串。

【讨论】:

    【解决方案2】:

    您必须删除这些字符串。对于 function_name 部分,它不是有效的 JSON。

    JSON 字符串通常以{(对象表示法)或[(数组表示法)开头,但也可以是标量值,例如字符串或数字。如果不首先确保字符串是有效的 JSON,就无法解析它。

    【讨论】:

    • JSON 不必包含在对象或数组中。
    【解决方案3】:

    您正在尝试获取文件中的字符串并将其解码为 JSON 文件。

    'function_name' 不是有效的 JSON 字符串,其余的都在里面。

    【讨论】:

      【解决方案4】:

      如何在不删除这些字符串的情况下解析它?

      没有办法。
      这应该适合你。

      $data = file_get_contents($source);
      $data = substr($data, strlen("function_name("));
      $data{strlen($data)-1}=$data{strlen($data)-2}=" ";
      $json = json_decode($data,true);
      

      {}[] 都适用于字符串以访问单个字符。

      【讨论】:

        【解决方案5】:

        文本文件中的函数,表示它不是 json 文件。

        使用正则表达式删除字符串,您的问题就解决了。

        如果函数是固定名称,请执行以下操作:

        $source = 'FILE_NAME.txt';
        $json_content = str_replace('function_name(', '', file_get_contents($source));
        $json_content = substr($json_content,0,-2);
        $json = json_decode($json_content,true);
        echo $json['one']['value'];
        

        【讨论】:

        • 如果function_name 也出现在 JSON 中怎么办?
        • 如果在 JSON 里面,那么会变成一个字符串。或者会使您的对象无效,如果无效,也不是 JSON。看看这篇文章json.org