如何提取路径信息?

问题描述 投票:2回答:1

对于以下JSON,我想提取这样的内容(是TAB字符)。

CHROMOSOMES<TAB>HUMAN<TAB>1<TAB>1
...
STATUSES<TAB>name<TAB>Approved
...
ATTRIBUTES<TAB>HGNC<TAB>HGNC ID<TAB>gd_hgnc_id
...
ATTRIBUTES<TAB>EXTERNAL<TAB>NCBI Gene ID<TAB>md_eg_id<TAB>NCBI
...
ORDER_BY<TAB>HGNC ID<TAB>gd_hgnc_id
...

我想要一种聪明的方法来提取此树结构的路径信息。有人能告诉我最好的方法吗?谢谢。

{
  "CHROMOSOMES": {
    "HUMAN": [
      {
        "name": "1",
        "value": "1"
      },
      {
        "name": "2",
        "value": "2"
      },
      {
        "name": "3",
        "value": "3"
      },
      {
        "name": "4",
        "value": "4"
      },
      {
        "name": "5",
        "value": "5"
      },
      {
        "name": "6",
        "value": "6"
      },
      {
        "name": "7",
        "value": "7"
      },
      {
        "name": "8",
        "value": "8"
      },
      {
        "name": "9",
        "value": "9"
      },
      {
        "name": "10",
        "value": "10"
      },
      {
        "name": "11",
        "value": "11"
      },
      {
        "name": "12",
        "value": "12"
      },
      {
        "name": "13",
        "value": "13"
      },
      {
        "name": "14",
        "value": "14"
      },
      {
        "name": "15",
        "value": "15"
      },
      {
        "name": "16",
        "value": "16"
      },
      {
        "name": "17",
        "value": "17"
      },
      {
        "name": "18",
        "value": "18"
      },
      {
        "name": "19",
        "value": "19"
      },
      {
        "name": "20",
        "value": "20"
      },
      {
        "name": "21",
        "value": "21"
      },
      {
        "name": "22",
        "value": "22"
      },
      {
        "name": "X",
        "value": "X"
      },
      {
        "name": "Y",
        "value": "Y"
      },
      {
        "name": "reserved loci",
        "value": "reserved"
      },
      {
        "name": "mitochondrial",
        "value": "mito"
      },
      {
        "name": "pseudoautosomal",
        "value": "XandY"
      }
    ]
  },
  "STATUSES": [
    {
      "name": "Approved",
      "value": "Approved"
    },
    {
      "name": "Entry and symbol withdrawn",
      "value": "Entry Withdrawn"
    }
  ],
  "ATTRIBUTES": {
    "HGNC": [
      {
        "name": "HGNC ID",
        "value": "gd_hgnc_id"
      },
      {
        "name": "Approved symbol",
        "value": "gd_app_sym"
      },
      {
        "name": "Approved name",
        "value": "gd_app_name"
      },
      {
        "name": "Status",
        "value": "gd_status"
      },
      {
        "name": "Locus type",
        "value": "gd_locus_type"
      },
      {
        "name": "Locus group",
        "value": "gd_locus_group"
      },
      {
        "name": "Previous symbols",
        "value": "gd_prev_sym"
      },
      {
        "name": "Previous name",
        "value": "gd_prev_name"
      },
      {
        "name": "Synonyms",
        "value": "gd_aliases"
      },
      {
        "name": "Name synonyms",
        "value": "gd_name_aliases"
      },
      {
        "name": "Chromosome",
        "value": "gd_pub_chrom_map"
      },
      {
        "name": "Date approved",
        "value": "gd_date2app_or_res"
      },
      {
        "name": "Date modified",
        "value": "gd_date_mod"
      },
      {
        "name": "Date symbol changed",
        "value": "gd_date_sym_change"
      },
      {
        "name": "Date name changed",
        "value": "gd_date_name_change"
      },
      {
        "name": "Accession numbers",
        "value": "gd_pub_acc_ids"
      },
      {
        "name": "Enzyme IDs",
        "value": "gd_enz_ids"
      },
      {
        "name": "NCBI Gene ID",
        "value": "gd_pub_eg_id"
      },
      {
        "name": "Ensembl gene ID",
        "value": "gd_pub_ensembl_id"
      },
      {
        "name": "Mouse genome database ID",
        "value": "gd_mgd_id"
      },
      {
        "name": "Specialist database links",
        "value": "gd_other_ids"
      },
      {
        "name": "Specialist database IDs",
        "value": "gd_other_ids_list"
      },
      {
        "name": "Pubmed IDs",
        "value": "gd_pubmed_ids"
      },
      {
        "name": "RefSeq IDs",
        "value": "gd_pub_refseq_ids"
      },
      {
        "name": "Gene group ID",
        "value": "family.id"
      },
      {
        "name": "Gene group name",
        "value": "family.name"
      },
      {
        "name": "CCDS IDs",
        "value": "gd_ccds_ids"
      },
      {
        "name": "Vega IDs",
        "value": "gd_vega_ids"
      },
      {
        "name": "Locus specific databases",
        "value": "gd_lsdb_links"
      }
    ],
    "EXTERNAL": [
      {
        "name": "NCBI Gene ID",
        "source": "NCBI",
        "value": "md_eg_id"
      },
      {
        "name": "OMIM ID",
        "source": "OMIM",
        "value": "md_mim_id"
      },
      {
        "name": "RefSeq",
        "source": "NCBI",
        "value": "md_refseq_id"
      },
      {
        "name": "UniProt ID",
        "source": "UniProt",
        "value": "md_prot_id"
      },
      {
        "name": "Ensembl ID",
        "source": "Ensembl",
        "value": "md_ensembl_id"
      },
      {
        "name": "Vega ID",
        "source": "Vega",
        "value": "md_vega_id"
      },
      {
        "name": "UCSC ID",
        "source": "UCSC",
        "value": "md_ucsc_id"
      },
      {
        "name": "Mouse genome database ID",
        "source": "MGI",
        "value": "md_mgd_id"
      },
      {
        "name": "Rat genome database ID",
        "source": "RGD",
        "value": "md_rgd_id"
      },
      {
        "name": "LNCipedia",
        "source": "LNCipedia",
        "value": "md_lncipedia"
      },
      {
        "name": "GtRNAdb",
        "source": "GtRNAdb",
        "value": "md_gtrnadb"
      }
    ]
  },
  "ORDER_BY": [
    {
      "name": "HGNC ID",
      "value": "gd_hgnc_id"
    },
    {
      "name": "Approved symbol",
      "value": "gd_app_sym_sort"
    },
    {
      "name": "Approved name",
      "value": "gd_app_name"
    },
    {
      "name": "Status",
      "value": "gd_status"
    },
    {
      "name": "Locus type",
      "value": "gd_locus_type"
    },
    {
      "name": "Locus group",
      "value": "gd_locus_group"
    },
    {
      "name": "Previous symbols",
      "value": "gd_prev_sym"
    },
    {
      "name": "Previous name",
      "value": "gd_prev_name"
    },
    {
      "name": "Synonyms",
      "value": "gd_aliases"
    },
    {
      "name": "Name synonyms",
      "value": "gd_name_aliases"
    },
    {
      "name": "Chromosome",
      "value": "gd_pub_chrom_map_sort"
    },
    {
      "name": "Date approved",
      "value": "gd_date2app_or_res"
    },
    {
      "name": "Date modified",
      "value": "gd_date_mod"
    },
    {
      "name": "Date symbol changed",
      "value": "gd_date_sym_change"
    },
    {
      "name": "Date name changed",
      "value": "gd_date_name_change"
    },
    {
      "name": "Accession numbers",
      "value": "gd_pub_acc_ids"
    },
    {
      "name": "Enzyme IDs",
      "value": "gd_enz_ids"
    },
    {
      "name": "NCBI Gene ID",
      "value": "gd_pub_eg_id"
    },
    {
      "name": "Ensembl gene ID",
      "value": "gd_pub_ensembl_id"
    },
    {
      "name": "Mouse genome database ID",
      "value": "gd_mgd_id"
    },
    {
      "name": "Specialist database links",
      "value": "gd_other_ids"
    },
    {
      "name": "Specialist database IDs",
      "value": "gd_other_ids_list"
    },
    {
      "name": "Pubmed IDs",
      "value": "gd_pubmed_ids"
    },
    {
      "name": "RefSeq IDs",
      "value": "gd_pub_refseq_ids"
    },
    {
      "name": "Gene group ID",
      "value": "family.id"
    },
    {
      "name": "Gene group name",
      "value": "family.name"
    },
    {
      "name": "CCDS IDs",
      "value": "gd_ccds_ids"
    },
    {
      "name": "Vega IDs",
      "value": "gd_vega_ids"
    },
    {
      "name": "Locus specific databases",
      "value": "gd_lsdb_links"
    },
    {
      "name": "NCBI Gene ID (supplied by NCBI)",
      "value": "md_eg_id"
    },
    {
      "name": "OMIM ID (supplied by OMIM)",
      "value": "md_mim_id"
    },
    {
      "name": "RefSeq (supplied by NCBI)",
      "value": "md_refseq_id"
    },
    {
      "name": "UniProt ID (supplied by UniProt)",
      "value": "md_prot_id"
    },
    {
      "name": "Ensembl ID (supplied by Ensembl)",
      "value": "md_ensembl_id"
    },
    {
      "name": "Vega ID (supplied by Vega)",
      "value": "md_vega_id"
    },
    {
      "name": "UCSC ID (supplied by UCSC)",
      "value": "md_ucsc_id"
    },
    {
      "name": "Mouse genome database ID (supplied by MGI)",
      "value": "md_mgd_id"
    },
    {
      "name": "Rat genome database ID (supplied by RGD)",
      "value": "md_rgd_id"
    },
    {
      "name": "LNCipedia ID (supplied by LNCipedia)",
      "value": "md_lncipedia"
    },
    {
      "name": "GtRNAdb ID (supplied by GtRNAdb)",
      "value": "md_gtrnadb"
    }
  ],
  "OUTPUT": [
    "Text",
    "Make URL for text"
  ]
}
json path export-to-csv jq
1个回答
0
投票

我想要一种聪明的方法来提取此树结构的路径信息。

paths是你的朋友。

鉴于输入中存在某些违规行为,确切的要求是并不总是很清楚,但以下可能是您正在寻找的即使没有,也很容易根据您的需要进行调整详细要求。

totsv.jq

def s: map(select(type=="string"));

paths as $p
| getpath($p) 
| if type == "object" and has("name")
  then ($p|s) + [.name, .value, (.source // empty)]
  elif type == "array" and .[0] == "Text" then ($p|s) + .
  else empty
  end
| @tsv

调用

jq -crf totsv.jq chromosomes.json

从输出中选择

CHROMOSOMES HUMAN   1   1
CHROMOSOMES HUMAN   2   2
...
STATUSES    Approved    Approved
STATUSES    Entry and symbol withdrawn  Entry Withdrawn
ATTRIBUTES  HGNC    HGNC ID gd_hgnc_id
...
ORDER_BY    GtRNAdb ID (supplied by GtRNAdb)    md_gtrnadb
OUTPUT  Text    Make URL for text

供将来参考

与其提供非常长的样本输入,不如提供更好的输入给出一个紧密结合细节要求的小样本。

© www.soinside.com 2019 - 2024. All rights reserved.