首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从txt文件中提取多个JSON对象

从txt文件中提取多个JSON对象
EN

Stack Overflow用户
提问于 2019-09-26 16:17:18
回答 1查看 162关注 0票数 0

我是一个arch linux用户,我遇到了JSON jq生成的问题。

我的目标是运行pacman,以便列出所有包和依赖项,并将其转换为-Qi。

然而,我只想要的名称,版本,描述和URL字段。

我尝试使用以下命令导出具有greps模式的pacman -Qi的输出:

代码语言:javascript
复制
pacman -Qi | grep "Name\|Version\|Description\|URL" > /home/packages.txt

在我尝试使用以下命令使用jq生成JSON文件之后:

代码语言:javascript
复制
jq -R -n -c '[inputs|split(",")|{(.[0]):.[1]}] | add' packages.txt > packages-raw.json

在此之后,我得到了一个未格式化的JSON输出,但它似乎是一个JSON输出。

我用以下格式格式化该文件

代码语言:javascript
复制
jq . packages-raw.json

JSON似乎是格式化的,但是当我使用VScode运行时,只有一个对象。

你能帮我格式化一下吗?

先谢谢你,

诚挚的问候

我希望输出为:

代码语言:javascript
复制
{
  "Name"            : "acl",
  "Version"         : "2.2.53-1",
  "Description"     : "Access control list utilities": " libraries and headers",
  "URL"             : "http://savannah.nongnu.org/projects/acl"
}

{ "Name"            : "archlinux-keyring",
  "Version"         : "20190827-1",
  "Description"     : "Arch Linux PGP keyring",
  "URL"             : "https://projects.archlinux.org/archlinux-keyring.git/"
} 

目前,我的输出如下:

代码语言:javascript
复制
{ "Name : acl": null, "Version : 2.2.53-1": null, "Description : Access control list utilities": " libraries and headers", "URL : http://savannah.nongnu.org/projects/acl": null, "Name : archlinux-keyring": null, "Version : 20190827-1": null, "Description : Arch Linux PGP keyring": null, "URL : https://projects.archlinux.org/archlinux-keyring.git/": null, "Name : argon2": null, "Version : 20190702-1": null, "Description : A password-hashing function (reference C implementation)": null, "URL : https://github.com/P-H-C/phc-winner-argon2": null,
EN

回答 1

Stack Overflow用户

发布于 2019-10-11 06:29:39

我没有一个拱门系统,但是从

我假设pacman -Qi的输出如下所示

代码语言:javascript
复制
Name            : vi
Version         : 1:070224-2
Description     : The original ex/vi text editor
Architecture    : x86_64
URL             : http://ex-vi.sourceforge.net/
Licenses        : custom:ex
Groups          : base
Provides        : None
Depends On      : ncurses
Optional Deps   : s-nail: used by the preserve command for notification [installed]
Required By     : None
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 290.00 KiB
Packager        : Evangelos Foutras <evangelos@foutrelis.com>
Build Date      : Sun 06 Sep 2015 09:34:15 PM CEST
Install Date    : Mon 03 Oct 2016 07:18:13 PM CEST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature

Name            : dbus
Version         : 1.4.1-1
URL             : http://www.freedesktop.org/Software/dbus
Licenses        : GPL custom
Groups          : None
Provides        : None
Depends On      : dbus-core>=1.4.1 libx11
Optional Deps   : None
Required By     : avahi perl-net-dbus qt system-tools-backends
Conflicts With  : None
Replaces        : None
Installed Size  : 112.00 K
Packager        : Jan de Groot <jgc@archlinux.org>
Architecture    : i686
Build Date      : Wed Dec 22 14:39:28 2010
Install Date    : Sun Jan 2 16:05:50 2011
Install Reason  : Installed as a dependency for another package
Install Script  : No
Description     : Freedesktop.org message bus system

下面是一个jq脚本,它将这些值转换为键值对象流,并根据Name属性的值将它们收集到聚合对象中

代码语言:javascript
复制
def kvpairs:                                                    # e.g. (note spaces)
    inputs                                                      # "Name    : vi"
  | capture("^(?<key>[^:]+):(?<value>.+)$")                     # { "key": "Name   ", "value": " vi" }
  | (.key, .value) |= gsub("^\\s+|\\s+$";"")                    # { "key": "Name", "value": "vi" }
  ;

  reduce kvpairs as $kv (
      { result:{}, cur:null }                                   # initial state
    ; if $kv.key == "Name" then .cur = $kv.value else . end     # track current object
    | .result[.cur][$kv.key] = $kv.value                        # apply update to current object
  )
| .result[]                                                     # generate result
| { Name, Version, Description, URL }                           # with only these members

test.jqtest.pac中的pacman输出中假设上述内容的示例执行

代码语言:javascript
复制
$ jq -MRn -f test.jq test.pac
{
  "Name": "vi",
  "Version": "1:070224-2",
  "Description": "The original ex/vi text editor",
  "URL": "http://ex-vi.sourceforge.net/"
}
{
  "Name": "dbus",
  "Version": "1.4.1-1",
  "Description": "Freedesktop.org message bus system",
  "URL": "http://www.freedesktop.org/Software/dbus"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58112422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档