如何使用 xidel 从 json 文件中提取精确值?
How to extract exact values from a json file with xidel?
请原谅我的英语,我不是母语人士
我是新手所以不太了解
我正在尝试使用 windows cmd 中的以下命令使用 xidel 从 json 文件中提取一些值,但它不起作用
xidel MyFile.json -e '$json//options/option/*[@option_id="D-ES"]/content_id'
一般json文件有三个选项,英语,西班牙语和葡萄牙语,我只想要与西班牙语相关的所有值
我要提取以下值
"group_id": "******",
"content_id": "******",
"current_content": "*****",
"option_id": "D-ES",
"subtitle": *****,
"id": "ES",
"desc": "Español",
并将提取的值放入如下
"group_id"-"*****","content_id"-"*****","current_content"-"*****","option_id"-"D-ES"-"subtitle"- *****,"id"- "ES""desc"- "Español",
这是我的 json 文件的一部分
{
"original": {
"id": "ING",
"desc": "Inglés"
},
"dubbed": "true",
"subbed": "false",
"options": {
"option": [
{
"group_id": "922450",
"content_id": "284951",
"current_content": "false",
"option_id": "D-ES",
"audio": "ES",
"subtitle": null,
"option_name": "dubbed",
"id": "ES",
"desc": "Español",
"label_short": "Dob. Español",
"label_large": "Doblada al Español",
"intro_start_time": null,
"intro_finish_time": null,
},
{
"group_id": "275495",
"content_id": "243856",
"current_content": "false",
"option_id": "D-PT",
"audio": "PT",
"subtitle": null,
"option_name": "dubbed",
"id": "PT",
"desc": "Portugués",
"label_short": "Dob. Portugués",
"label_large": "Doblada al Portugués",
"intro_start_time": null,
"intro_finish_time": null,
},
{
"group_id": "248954",
"content_id": "245238",
"current_content": "false",
"option_id": "O-EN",
"audio": "ORIGINAL",
"subtitle": null,
"option_name": "original",
"id": "EN",
"desc": "Inglés",
"label_short": "Id. Inglés",
"label_large": "Idioma Original Inglés",
"intro_start_time": null,
"intro_finish_time": null,
}
]
}
}
我应该使用什么命令来提取与西班牙语相关的值?
xidel MyFile.json -e '$json//options/option/*[@option_id="D-ES"]/content_id'
- 如果您使用 Windows 二进制文件,通常建议交换引号。这种引用风格适用于 Linux.
- 要导航“选项”数组,请使用
(option)()
(或者 XQuery 3.1 语法 option?*
)。
- 仅当您输入 HTML/XML 时才需要
@
。
所以正确的查询应该是 -e "$json//options/(option)()[option_id='D-ES']/content_id"
。
I want to extract the following values [...]
xidel -s MyFile.json -e "$json//options/(option)()[option_id='D-ES']/(group_id,content_id,current_content,option_id,subtitle,id,desc)"
922450
284951
false
D-ES
ES
Español
要包含我会做的属性名称:
xidel -s MyFile.json -e "for $x in ('group_id','content_id','current_content','option_id','subtitle','id','desc') return $json//options/concat($x,' - ',(option)()[option_id='D-ES']($x))"
group_id - 922450
content_id - 284951
current_content - false
option_id - D-ES
subtitle
id - ES
desc - Español
如果你真的想要周围的双引号,你可以在 concat()
-function...
中添加它们(用反斜杠转义)
-e ".../concat('\"',$x,'\"-\"',(option)()[option_id='D-ES']($x),'\"')"
...或者您可以使用 xidel
的“扩展字符串”语法...
-e ".../x'\"{$x}\"-\"{(option)()[option_id='D-ES']($x)}\"'"
...或对双引号使用 XQuery 表示法...
--xquery ".../x'"{$x}"-"{(option)()[option_id='D-ES']($x)}"'"
输出:
"group_id"-"922450"
"content_id"-"284951"
"current_content"-"false"
"option_id"-"D-ES"
"subtitle"-""
"id"-"ES"
"desc"-"Español"
最后将这个序列变成单行,其中每个项目由 ,
:
分隔
xidel -s MyFile.json -e "join(for $x in ('group_id','content_id','current_content','option_id','subtitle','id','desc') return $json//options/x'\"{$x}\"-\"{(option)()[option_id='D-ES']($x)}\"',',')"
"group_id"-"922450","content_id"-"284951","current_content"-"false","option_id"-"D-ES","subtitle"-"","id"-"ES","desc"-"Español"
终于command/query美化了:
-e "
join(
for $x in (
'group_id','content_id','current_content',
'option_id','subtitle','id','desc'
) return
$json//options/x'\"{$x}\"-\"{(option)()[option_id='D-ES']($x)}\"',
','
)
"
请原谅我的英语,我不是母语人士
我是新手所以不太了解
我正在尝试使用 windows cmd 中的以下命令使用 xidel 从 json 文件中提取一些值,但它不起作用
xidel MyFile.json -e '$json//options/option/*[@option_id="D-ES"]/content_id'
一般json文件有三个选项,英语,西班牙语和葡萄牙语,我只想要与西班牙语相关的所有值
我要提取以下值
"group_id": "******",
"content_id": "******",
"current_content": "*****",
"option_id": "D-ES",
"subtitle": *****,
"id": "ES",
"desc": "Español",
并将提取的值放入如下
"group_id"-"*****","content_id"-"*****","current_content"-"*****","option_id"-"D-ES"-"subtitle"- *****,"id"- "ES""desc"- "Español",
这是我的 json 文件的一部分
{
"original": {
"id": "ING",
"desc": "Inglés"
},
"dubbed": "true",
"subbed": "false",
"options": {
"option": [
{
"group_id": "922450",
"content_id": "284951",
"current_content": "false",
"option_id": "D-ES",
"audio": "ES",
"subtitle": null,
"option_name": "dubbed",
"id": "ES",
"desc": "Español",
"label_short": "Dob. Español",
"label_large": "Doblada al Español",
"intro_start_time": null,
"intro_finish_time": null,
},
{
"group_id": "275495",
"content_id": "243856",
"current_content": "false",
"option_id": "D-PT",
"audio": "PT",
"subtitle": null,
"option_name": "dubbed",
"id": "PT",
"desc": "Portugués",
"label_short": "Dob. Portugués",
"label_large": "Doblada al Portugués",
"intro_start_time": null,
"intro_finish_time": null,
},
{
"group_id": "248954",
"content_id": "245238",
"current_content": "false",
"option_id": "O-EN",
"audio": "ORIGINAL",
"subtitle": null,
"option_name": "original",
"id": "EN",
"desc": "Inglés",
"label_short": "Id. Inglés",
"label_large": "Idioma Original Inglés",
"intro_start_time": null,
"intro_finish_time": null,
}
]
}
}
我应该使用什么命令来提取与西班牙语相关的值?
xidel MyFile.json -e '$json//options/option/*[@option_id="D-ES"]/content_id'
- 如果您使用 Windows 二进制文件,通常建议交换引号。这种引用风格适用于 Linux.
- 要导航“选项”数组,请使用
(option)()
(或者 XQuery 3.1 语法option?*
)。 - 仅当您输入 HTML/XML 时才需要
@
。
所以正确的查询应该是 -e "$json//options/(option)()[option_id='D-ES']/content_id"
。
I want to extract the following values [...]
xidel -s MyFile.json -e "$json//options/(option)()[option_id='D-ES']/(group_id,content_id,current_content,option_id,subtitle,id,desc)"
922450
284951
false
D-ES
ES
Español
要包含我会做的属性名称:
xidel -s MyFile.json -e "for $x in ('group_id','content_id','current_content','option_id','subtitle','id','desc') return $json//options/concat($x,' - ',(option)()[option_id='D-ES']($x))"
group_id - 922450
content_id - 284951
current_content - false
option_id - D-ES
subtitle
id - ES
desc - Español
如果你真的想要周围的双引号,你可以在 concat()
-function...
-e ".../concat('\"',$x,'\"-\"',(option)()[option_id='D-ES']($x),'\"')"
...或者您可以使用 xidel
的“扩展字符串”语法...
-e ".../x'\"{$x}\"-\"{(option)()[option_id='D-ES']($x)}\"'"
...或对双引号使用 XQuery 表示法...
--xquery ".../x'"{$x}"-"{(option)()[option_id='D-ES']($x)}"'"
输出:
"group_id"-"922450"
"content_id"-"284951"
"current_content"-"false"
"option_id"-"D-ES"
"subtitle"-""
"id"-"ES"
"desc"-"Español"
最后将这个序列变成单行,其中每个项目由 ,
:
xidel -s MyFile.json -e "join(for $x in ('group_id','content_id','current_content','option_id','subtitle','id','desc') return $json//options/x'\"{$x}\"-\"{(option)()[option_id='D-ES']($x)}\"',',')"
"group_id"-"922450","content_id"-"284951","current_content"-"false","option_id"-"D-ES","subtitle"-"","id"-"ES","desc"-"Español"
终于command/query美化了:
-e "
join(
for $x in (
'group_id','content_id','current_content',
'option_id','subtitle','id','desc'
) return
$json//options/x'\"{$x}\"-\"{(option)()[option_id='D-ES']($x)}\"',
','
)
"