如何用 Xidel 正确读取这个 JSON 文件?

How to read correctly this JSON file with Xidel?

请原谅我的英语,我不是母语人士

我有一个 json 文件“VideoJson.json”,其中包含以下内容

VideoJSONLoaded({"video_type": "0","image_id": "0","profile": false,"published_urls": [{"embed_url": "https://alura.hls/vod/p/manifest/55.mpd","protocol": "https","cdn_name": "Cloud","state": 10,"live_url": "https://alura.hls/vod/p/manifest/55.mpd"}],"access_rules": "{}","timed_cues": [],"embedded_cc": 1,"adst_temp_ver": "2"})

我尝试使用 Xidel 使用以下命令阅读 json

xidel-0.9.8.x32 "VideoJson.json" -e "$json"

我收到一条错误消息

Error: jerr:JNDY0021: error at VideoJSONLoaded (tkIdentifier) in VideoJSONLoaded...

我认为这是因为 json 在 VideoJSONLoaded(JSON)

里面

我应该使用什么命令才能正确读取 json 并提取数据?

无论为您提供什么工具,这个文件都做得不好,因为它根本不是 JSON。

当您打开“*.json”文件时,xidel 假定为 JSON (--input-format=json)。如果不是,则必须使用 --input-format=text--input-format=html for v0.9.8)覆盖它:

xidel -s --input-format=text "VideoJson.json" -e "$raw"
VideoJSONLoaded({"video_type": "0",[...],"adst_temp_ver": "2"})

要提取 JSON,您可以使用 substring-before()substring-after():

xidel -s --input-format=text "VideoJson.json" -e "substring-before(substring-after($raw,'VideoJSONLoaded('),')')"
{"video_type": "0",[...],"adst_temp_ver": "2"}

extract():

xidel -s --input-format=text "VideoJson.json" -e "extract($raw,'\{.+\}')"
{"video_type": "0",[...],"adst_temp_ver": "2"}

最后 parse-json()json() for v0.9.8)解析 JSON:

xidel -s --input-format=text "VideoJson.json" -e "parse-json(extract($raw,'\{.+\}'))"
{
  "video_type": "0",
  "image_id": "0",
  "profile": false,
  "published_urls": [
    {
      "embed_url": "https://alura.hls/vod/p/manifest/55.mpd",
      "protocol": "https",
      "cdn_name": "Cloud",
      "state": 10,
      "live_url": "https://alura.hls/vod/p/manifest/55.mpd"
    }
  ],
  "access_rules": "{}",
  "timed_cues": [],
  "embedded_cc": 1,
  "adst_temp_ver": "2"
}