Json 如何设置条件jq转换?

Json 如何设置条件jq转换?,json,conditional,jq,Json,Conditional,Jq,我需要转换一个JSON,它可以有1个值或2个值。因此,它可以是: {"form":{"textinput1":"aaa"},"params":{"context":""}} 或 我需要的输出是: {"input": {"text": "aaa"}} 或 JQ转换将是: {"input": {"text": .form.textinput1}} 或 但是如何将这两者合并为一个条件?jq解决方案: jq '.params.context as $ctx | {input: {t

我需要转换一个JSON,它可以有1个值或2个值。因此,它可以是:

{"form":{"textinput1":"aaa"},"params":{"context":""}}


我需要的输出是:

{"input": {"text": "aaa"}}


JQ转换将是:

{"input": {"text": .form.textinput1}}



但是如何将这两者合并为一个条件?

jq解决方案:

jq '.params.context as $ctx 
    | {input: {text:.form.textinput1}} 
    + (if ($ctx | length) > 0 then {context:$ctx} else {} end)' file.json

  • .params.context作为$ctx
    -将
    .params.context
    值分配到变量
    $ctx
  • if($ctx | length)>0
    -检查
    $ctx
    是否为空

    • jq有两个基本条件:
      如果。。。然后。。。其他的结束
      A//B
      。在您的情况下,第一个就足够了:

      {"input": {"text": .form.textinput1}}
      + (.params.context | if . == "" then null else {"context":.} end)
      

      如果您需要对
      .context
      应用一些转换,例如f,如果它不是“”,则将最后的
      替换为
      f

      ,我需要返回此问题。实际上,我的“上下文”是一个JSON对象,而不是字符串。所以我需要添加| fromjson使其工作:{“输入”:{“文本”:.form.textinput1},“上下文”:.params.context | fromjson}。不幸的是,在第一种情况下(上下文为空),这会崩溃。我能做什么?不幸的是,到目前为止,你提供的关于这个新问题的详细信息还不足以提供详细的答案。然而,我感到困惑的是,您认为有必要将对象转换为字符串。无论如何,如果你不能理解,那么我建议你提出一个新的SO问题。谢谢你到目前为止的投入。我编辑了原始帖子,要求添加| fromjson。如果我不将对象转换为字符串,那么每个“都会添加\个字符,API不喜欢它。我认为它在这里崩溃:+(.params.context | fromjson-尝试在“context”时执行| fromjson:”“。也许你知道一个解决方法?对那些提供了有效答案的人来说,改变你的问题是不公平的,而且往往会让其他人难以理解。因为你似乎是新来的,所以我已经更新了我的答案,但以后如果有一个有效的a,请避免改变Q。谢谢。
      {"input": {"text": .form.textinput1},"context":.params.context}
      
      jq '.params.context as $ctx 
          | {input: {text:.form.textinput1}} 
          + (if ($ctx | length) > 0 then {context:$ctx} else {} end)' file.json
      
      {"input": {"text": .form.textinput1}}
      + (.params.context | if . == "" then null else {"context":.} end)