使用JQ创建嵌套的Json对象

使用JQ创建嵌套的Json对象,json,bioinformatics,jq,Json,Bioinformatics,Jq,我需要获取以下Json输入的Exon中的值,并将其拆分为“;”并转换为嵌套Json,如下预期输出部分所示 样本输入 预期产量 注 此外,这与这里的问题有关:- 提前谢谢你的帮助 我从逗号分隔的输入文件中尝试的解决方案(参见我发布的另一个问题) 我无法循环它并递归地阅读 由于底层需求已经足够清晰,因此我组装了以下解决方案,其行为与示例完全一致。但是,更高级别的要求相当粗略,因此您可能需要进行一些调整 低级需求(关于转换字符串)可以按如下方式实现: # Input: a string def ge

我需要获取以下Json输入的Exon中的值,并将其拆分为“;”并转换为嵌套Json,如下预期输出部分所示

样本输入 预期产量 注 此外,这与这里的问题有关:-

提前谢谢你的帮助

我从逗号分隔的输入文件中尝试的解决方案(参见我发布的另一个问题)
我无法循环它并递归地阅读

由于底层需求已经足够清晰,因此我组装了以下解决方案,其行为与示例完全一致。但是,更高级别的要求相当粗略,因此您可能需要进行一些调整

低级需求(关于转换字符串)可以按如下方式实现:

# Input: a string
def gene2object:
  split(";")
  | [.[0], { chromosome: .[1], 
             start: (.[2]|tonumber),
             end:   (.[3]|tonumber)} ];
walk( if type == "object" and .metric == "Exons" 
      then .value |= (map(gene2object)|add) 
      else .
      end )
现在可以非常简单地编写一个解决方案,如下所示:

# Input: a string
def gene2object:
  split(";")
  | [.[0], { chromosome: .[1], 
             start: (.[2]|tonumber),
             end:   (.[3]|tonumber)} ];
walk( if type == "object" and .metric == "Exons" 
      then .value |= (map(gene2object)|add) 
      else .
      end )
标准调用(沿着:
jq-f program.jq input.json
)生成的输出与所描述的完全相同,因此我在此不再重复

如果您的jq没有
walk/1
,那么您可以从
也就是说,搜索:
def walk

请显示您尝试过的内容以及您面临的问题。所以这不是一个免费的编码服务。嗨,Dat,我对使用Jq比较陌生,而且我也不是一个专业的软件工程师。我的专长是基因组学和脚本编写。我确实尝试过通过创建一个JQ函数来实现这一点,该函数是根据我之前的一个问题的答案使用的,我无法分割子对象,它正在打印整行。我将编辑问题并添加我尝试过的内容。谢谢你的建议。我会记住以后的帖子。谢谢peak,这个解决方案很好用。你能给我指一本手册吗?在那里我可以更多地了解jq1的复杂功能。手册是最好的地方(),但也可以参见常见问题解答、烹饪手册和。(2) 如果您的jq没有
walk
,我强烈建议您使用最新版本(例如从
master
),谢谢,现在我了解了更多关于SO功能的信息。我接受了答案。
walk( if type == "object" and .metric == "Exons" 
      then .value |= (map(gene2object)|add) 
      else .
      end )