Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用从流中提取的值创建数组_Arrays_Json_List_Merge_Jq - Fatal编程技术网

Arrays 使用从流中提取的值创建数组

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

我正在尝试使用jq为xhr制定请求参数

请求必须如下所示:

{
  "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"
  }
}
因此,我理想的希望是正确地转换上述内容。我在这里看到两个困难:

  • 项目编号是一个“未知”密钥
  • JSON结果似乎不是数组本身
  • 我能想到的最好的jq语法是:

    {“#名称空间”:{“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是
    数据
    中的元素数。注释不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。