Arrays 使用从流中提取的值创建数组
我正在尝试使用jq为xhr制定请求参数 请求必须如下所示:Arrays 使用从流中提取的值创建数组,arrays,json,list,merge,jq,Arrays,Json,List,Merge,Jq,我正在尝试使用jq为xhr制定请求参数 请求必须如下所示: { "ns:inputArticleItemList": { "#namespaces": { "ns": "http://www.unknown.com/ccp/basit/service/article/api" }, "articles": [ { "ar
{
"ns:inputArticleItemList": {
"#namespaces": {
"ns": "http://www.unknown.com/ccp/basit/service/article/api"
},
"articles": [
{
"articleID": "000000000002158654",
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
},
{
"articleID": "000000000002147829",
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
},
{
"articleID": "000000000002103650",
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
},
]
}
}
{
"2201299": {
"title": "this is the product description for article 2201299",
"prop1": "value1",
"prop2": "value2",
"prop3": "value3"
}
}
{
"2240002": {
"title": "this is the product description for article 2240002",
"prop1": "value1",
"prop2": "value2",
"prop3": "value3"
}
}
我要使用的JSON如下所示:
{
"ns:inputArticleItemList": {
"#namespaces": {
"ns": "http://www.unknown.com/ccp/basit/service/article/api"
},
"articles": [
{
"articleID": "000000000002158654",
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
},
{
"articleID": "000000000002147829",
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
},
{
"articleID": "000000000002103650",
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
},
]
}
}
{
"2201299": {
"title": "this is the product description for article 2201299",
"prop1": "value1",
"prop2": "value2",
"prop3": "value3"
}
}
{
"2240002": {
"title": "this is the product description for article 2240002",
"prop1": "value1",
"prop2": "value2",
"prop3": "value3"
}
}
因此,我理想的希望是正确地转换上述内容。我在这里看到两个困难:
{“#名称空间”:{“ns”:http://www.unknown.com/ccp/basit/service/article/api“}}+(键[]|{articleId:,插入代码:“62”,calculatePrice:true,checkAvailability:true,FindExclutions:true}{articles:.}){ns:inputArticleItemList:。}
但是,这无法从键生成真正的数组并正确插入根/父元素
结果如下:
{
"ns:inputArticleItemList": {
"#namespaces": {
"ns": "http://www.unknown.com/ccp/basit/service/article/api"
},
"articles": {
"articleId": "2201299",
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
}
}
}
{
"ns:inputArticleItemList": {
"#namespaces": {
"ns": "http://www.unknown.com/ccp/basit/service/article/api"
},
"articles": {
"articleId": "2240002",
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
}
}
}
这里是要处理的jqplay:您正在寻找的
使用命令行上的-n/--null input选项,此程序生成预期的输出
{
"ns:inputArticleItemList": {
"#namespaces": {
"ns": "http://www.unknown.com/ccp/basit/service/article/api"
},
"articles": [
{
"articleID": (inputs | keys_unsorted[]),
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
}
]
}
}
您正在寻找的
使用命令行上的-n/--null input选项,此程序生成预期的输出
{
"ns:inputArticleItemList": {
"#namespaces": {
"ns": "http://www.unknown.com/ccp/basit/service/article/api"
},
"articles": [
{
"articleID": (inputs | keys_unsorted[]),
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
}
]
}
}
您可以使用slurp模式(
--slurp
/-s
)和以下程序将输入合并到一个数组中:
{
"ns:inputArticleItemList": {
"#namespaces": {
"ns": "http://www.unknown.com/ccp/basit/service/article/api"
},
articles: [
{
"articleID": ( .[] | keys_unsorted[] ),
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
}
]
}
}
使用slurp模式在功能上等同于使用[inputs]
作为空输入的输入源(--null input
/-n
),提供了一种替代解决方案
您可以使用slurp模式(
--slurp
/-s
)和以下程序将输入合并到一个数组中:
{
"ns:inputArticleItemList": {
"#namespaces": {
"ns": "http://www.unknown.com/ccp/basit/service/article/api"
},
articles: [
{
"articleID": ( .[] | keys_unsorted[] ),
"insertCode": "62",
"calculatePrice": true,
"checkAvailability": true,
"findExclusions": true
}
]
}
}
使用slurp模式在功能上等同于使用[inputs]
作为空输入的输入源(--null input
/-n
),提供了一种替代解决方案
好的,再次感谢。我只是觉得很难相信这是唯一的方法,看到所有这些展平/添加/映射/减少功能。但你的评论似乎是合理的。对不起,只是一个相关的小问题。如果输入中有对象列表,则可以使用。[]运算符将其设置为对象序列。jq中没有任何关键字可以逆转这种行为,对吗?(除了你贴的那张)@mebebog不确定,你能举个例子吗?当然可以。使用此jqplay:在应用.data.[]之后是否不可能重建原始JSON?即,反转操作?@mebebog否,JQ中没有关键字可以从其一部分重建原始输入;通过
.data.[].
中最后一个管道的任何内容都不能将您提供给JQ的JSON值带回,除了一个变量,如。由于$in |.data |.[]|$in
将打印原始输入N次,其中N是数据
中的元素数。好的,再次感谢。我只是觉得很难相信这是唯一的方法,看到所有这些展平/添加/映射/减少功能。但你的评论似乎是合理的。对不起,只是一个相关的小问题。如果输入中有对象列表,则可以使用。[]运算符将其设置为对象序列。jq中没有任何关键字可以逆转这种行为,对吗?(除了你贴的那张)@mebebog不确定,你能举个例子吗?当然可以。使用此jqplay:在应用.data.[]之后是否不可能重建原始JSON?即,反转操作?@mebebog否,JQ中没有关键字可以从其一部分重建原始输入;通过.data.[].
中最后一个管道的任何内容都不能将您提供给JQ的JSON值带回,除了一个变量,如。由于$in |.data |.[]|$in
将打印原始输入N次,其中N是数据
中的元素数。注释不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。