json - 使用 jq 或 Python 解析 JSON

标签 json linux unix jq

我有这个嵌套的 JSON

[
  "[[Input=[Name=ABC, createDateTime=2019-30-11, RollNumber=9]]]",
  "[[SubjectList=[Summer=, Winter=, Autumn=, Spring=, rList=, sList=, additionalList=, emailList=, FoodList=, sAssignmentList=, summerworkList=, outdoorList=, movielist=]]]",
  "[ProcessingDate=2018-10-06]",
  "[Hobbies=Football]",
  "[Phone=Android,,]"
]

如何使用 Python 处理此 JSON 并获取足球值或球数?

这是我尝试过的:

代码

import json
row = '''[
  "[[Input=[Name=ABC, createDateTime=2019-30-11, RollNumber=9]]]",
  "[[SubjectList=[Summer=, Winter=, Autumn=, Spring=, rList=, sList=, additionalList=, emailList=, FoodList=, sAssignmentList=, summerworkList=, outdoorList=, movielist=]]]",
  "[ProcessingDate=2018-10-06]",
  "[Hobbies=Football]",
  "[Phone=Android,,]"
]'''
row_dict = json.loads(row)
print(row_dict[3])

使用它 - 我得到以下输出:

[Hobbies=Football]

但是我缺少下一级解析以获取 足球 作为输出

最佳答案

这是一种使用 capture 的方法数组中的非 json 字符串。
它假设 [:alnum:] posix 正则表达式字符类足以匹配 =
之后的值 假设 test.json

中的数据执行示例
$ jq -M '.[] | capture("Hobbies=(?<Hobbies>[[:alnum:]]+)")' test.json
{
  "Hobbies": "Football"
}

这是一个可以准确生成 Football 的变体:

$ jq -Mr '.[] | capture("Hobbies=(?<Hobbies>[[:alnum:]]+)") | .Hobbies' test.json
Football

这是一个示例脚本,它使用多个捕获并将它们与add组合起来。

[ .[]
  |  capture("Hobbies=(?<Hobbies>[[:alnum:]]+)")
   , capture("RollNumber=(?<RollNumber>[[:alnum:]]+)")
] | add

示例执行假设脚本位于 test.jq

$ jq -M -f test.jq test.json
{
  "RollNumber": "9",
  "Hobbies": "Football"
}

关于json - 使用 jq 或 Python 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180768/

相关文章:

linux - 为脚本创建引用

c - 为什么我这里没有错误?

windows - ctime, mtime, holding directory, windows, linux

javascript - JavaScript 中的 Cookie 数组

Linux crontab 不执行?

json - 解压缩巨大的 json gzip 文件导致 python 中的内存错误

一个套接字可以加入多个多播组吗?

c++ - libconfig 不是静态链接。如何编译成程序

java - 覆盖 Json 对象中的值

java - 如何在 java 中正确格式化 JSON 字符串?