请看以下命令:
perl -0777ne 'print "$&\n\n" while /"(QueryString|Params)":\[(\{"Name":".*?", ?"Value":".*?"\},? ?)*\]/g;' myfile.json
它的json字符串iterate through each match像:
{
"Some": "Random stuff",
"QueryString": [
{ "Name": "IsOrdered", "Value": "1" },
{ "Name": "TimeStamp", "Value": "11654116426247" }
],
"Params": [
{ "Name": "ClassName", "Value": "PRODUCT" },
{ "Name": "ListID", "Value": "Products" },
{ "Name": "Mode ", "Value": "1" },
{ "Name": "Dept" , "Value": "5" },
{ "Name": "HasPrevOrder", "Value": "" }
],
"And": {
"QueryString":[]
},
"More": "like",
"More+": "this"
}
现在,我的问题是如何遍历名称/值对的每个正则表达式匹配,并将它们连接回正常的http查询字符串?
例如,For
"QueryString":[{"Name":"IsOrdered", "Value":"1"}, {"Name":"TimeStamp", "Value":"11654116426247"}]
连接的输出应该
"QueryString":"IsOrdered=1&TimeStamp=11654116363378"
和"QueryString":[]
到"QueryString":""
的值
请注意,我希望执行正则表达式匹配和替换,因为我需要保留其余的JSON组件。我所讨论的JSON文件实际上是一个har文件。它的结构非常复杂,但"(QueryString|Params)":\[(\{"Name":".*?", ?"Value":".*?"\},? ?)*\]
我只想换掉它,仅此而已
1条答案
按热度按时间wn9m85ua1#
我会使用
jq
。jqplay上的Demo
这将修改所有包含其中一个键的元素的对象。我通常更喜欢更有针对性的东西(不仅仅是出于效率的原因,而是为了避免意外地更改一些不应该更改的东西),但我对HAR格式的知识还不足以做到这一点。
下面是一个同样可以完成该任务的Perl程序: