我正在尝试解析从curl请求返回的JSON,如下所示:
curl 'http://twitter.com/users/username.json' |
sed -e 's/[{}]/''/g' |
awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}'
Run Code Online (Sandbox Code Playgroud)
以上将JSON拆分为字段,例如:
% ...
"geo_enabled":false
"friends_count":245
"profile_text_color":"000000"
"status":"in_reply_to_screen_name":null
"source":"web"
"truncated":false
"text":"My status"
"favorited":false
% ...
Run Code Online (Sandbox Code Playgroud)
如何打印特定字段(用-v k=text?表示)?
在复杂的JSON数组和哈希中搜索项目时,例如:
[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [
// etc.
}]
}
]
Run Code Online (Sandbox Code Playgroud)
我可以用某种查询语言来查找项目in [0].objects where id = 3吗?
虽然我可以诊断事件的根本原因,确定有多少用户受到影响,或蒸馏时间日志,以评估性能和近期代码更改吞吐量的影响,我的工具保持不变:grep,awk,sed,tr,uniq,sort,zcat,tail,head,join,和split.为了将它们粘合在一起,Unix为我们提供了管道,并且我们有更好的过滤xargs.如果这些让我失望,那就永远都是perl -e.
这些工具非常适合处理CSV文件,制表符分隔文件,具有可预测行格式的日志文件或具有逗号分隔键值对的文件.换句话说,每行都没有上下文的文件.
我最近需要浏览千兆字节的XML来构建用户的直方图.使用我的工具这很容易,但对于更复杂的查询,正常的方法会崩溃.假设我的文件包含以下内容:
<foo user="me">
<baz key="zoidberg" value="squid" />
<baz key="leela" value="cyclops" />
<baz key="fry" value="rube" />
</foo>
Run Code Online (Sandbox Code Playgroud)
让我们说我想生成一个从用户到平均<baz>每个s 的映射<foo>.逐行处理不再是一个选项:我需要知道<foo>我正在检查哪个用户,所以我知道要更新的平均值.完成这项任务的任何类型的Unix一行都可能是不可理解的.
幸运的是,在XML-land中,我们有很多精彩的技术,如XPath,XQuery和XSLT来帮助我们.
以前,我已经习惯使用精彩的XML::XPathPerl模块来完成上面的查询,但在找到可以针对当前窗口运行XPath表达式的TextMate插件后,我停止编写一次性Perl脚本来查询XML.我刚刚发现了正在安装的XMLStarlet,因为我输入了这个,并且我期待将来使用它.
所以这引出了我的问题:JSON有没有这样的工具?一些调查任务要求我对JSON文件进行类似的查询只是时间问题,并且没有像XPath和XSLT这样的工具,这样的任务将会困难得多.如果我有一堆看起来像这样的JSON:
{
"firstName": "Bender",
"lastName": "Robot",
"age": 200,
"address": {
"streetAddress": "123",
"city": "New …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的数组(这里有超过3000个对象而不是3个):
items = [{name:'charlie', age:'16'}, {name:'ben', age:'18'}, {name:'steve', age:'18'}]
Run Code Online (Sandbox Code Playgroud)
只返回18岁人物的最佳方法是什么?所以我想:
items = [{name:'ben', age:'18'}, {name:'steve', age:'18'}]
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的是(使用jQuery):
newArray = []
$.each(items, function(index, item) {
if(item.age=='18') {
newArray.push(item)
}
})
Run Code Online (Sandbox Code Playgroud)
考虑到有3000万个物体,而且我将一次进行多达五十次的比较,那就是很多循环.有没有更好的办法?
我正在研究一个输出JSON文件的系统,我使用Python来解析数据并在UI(PySide)中显示它.我现在想对该系统添加过滤,我认为不是编写查询系统,如果有一个用于JSON(在Python中),那将节省我很多开发时间.我找到了这个帖子:
但对于基于Web的系统来说更是如此.关于Python等价的任何想法?
编辑[为清晰起见]:
我将生成的数据格式如下:
{
"Operations": [
{
"OpID": "0",
"type": "callback",
"stringTag1": "foo1",
"stringTag2": "FooMsg",
"Children": [...],
"value": "0.000694053"
},
{
"OpID": "1",
"type": "callback",
"stringTag1": "moo1",
"string2": "MooMsg",
"Children": [...],
"value": "0.000468427"
}
}
Run Code Online (Sandbox Code Playgroud)
其中'Children'可以是同一事物的嵌套数组(其他操作).系统将构建为允许用户添加自己的标签以及数据.我希望有一个查询系统,允许用户定义自己的"过滤器",因此有关查询语言的问题.如果有什么东西可以让我做类似"SELECT*WHERE"的类型"=="回调"并获得必要的操作,那就太好了.
Pync的建议很有意思,我来看看.
我有一些像这样的Python词典:
A = {id: {idnumber: condition},....
Run Code Online (Sandbox Code Playgroud)
例如
A = {1: {11 : 567.54}, 2: {14 : 123.13}, .....
Run Code Online (Sandbox Code Playgroud)
我需要搜索字典中是否有任何字典idnumber == 11并使用condition.但如果在整个字典中没有idnumber == 11,我需要继续下一个字典.
这是我的尝试:
for id, idnumber in A.iteritems():
if 11 in idnumber.keys():
calculate = ......
else:
break
Run Code Online (Sandbox Code Playgroud) Run Code Online (Sandbox Code Playgroud){ "response": { "result": { "Countries": { "row": [ { "no": "1", "FL": [ { "content": "USA", "val": "Country" }, { "content": "Barack Obama", "val": "President" } ] }, { "no": "2", "FL": [ { "content": "Cuba", "val": "Country" }, { "content": "Raul Castro", "val": "President" } ] } ] } } } }
{ presidents: [
{ "name": "Barack Obama"}
]
}
Run Code Online (Sandbox Code Playgroud)
我有以下javascript对象文字(摘录)
var foo = {"hello[35]":100,"goodbye[45]":42};
Run Code Online (Sandbox Code Playgroud)
我有以下查询:
var query = "hello"
Run Code Online (Sandbox Code Playgroud)
我想调用foo [query]来获取值100,但是有一个[35]我不一定知道它的值.我确信我会得到一个独特的比赛.有没有办法输入查询是某种javascript正则表达式?即
Regex = /hello/
foo[Regex]
100
Run Code Online (Sandbox Code Playgroud)
原谅这个菜鸟问题......
朋友我跟随json数组
[
{
"Rate":100.0,
"MaterialID":"BOLT",
"BrandName":"",
"Description":"",
"Unit":"KG",
"TokenNumber":2
},
{
"Rate":null,
"MaterialID":"PLYWOOD",
"BrandName":"",
"Description":"",
"Unit":"FT",
"TokenNumber":2
},
{
"Rate":null,
"MaterialID":"SCREW 1.5 INCH",
"BrandName":"",
"Description":"",
"Unit":"KG",
"TokenNumber":2
}
]
Run Code Online (Sandbox Code Playgroud)
我想知道找到materialID具有价值的元素的最短路径PLYWOOD.
我可以使用for循环来做到这一点.但我想知道这样的一些捷径
var unit = jsonArray[<whiere materialID == 'PLYWOOD']['Unit'];
jQuery如果需要,您可以使用.
json ×6
javascript ×5
xpath ×3
arrays ×2
jquery ×2
python ×2
bash ×1
command-line ×1
dictionary ×1
jsonpath ×1
nested ×1
parsing ×1
recursion ×1
regex ×1
sql ×1
typescript ×1
xquery ×1
xslt ×1