Go新手。我的第一个项目是比较NodeJS代理和Go代理的账号令牌化。我已经做了几年的NodeJS,非常熟悉它。我的代理不会知道来自目标服务器的任何请求或响应的格式。但它确实有来自Redis/MongoDB的类似于JSONPath表达式的配置。这些配置可以改变目标服务器/路径、查询参数、头、请求体和响应体。
对于NodeJS,我使用deepdash的paths函数来获取JSON对象中所有叶子的数组,这些叶子的格式为JSONPath。我使用这个数组和RegEx来查找我需要从任何请求或响应体中处理的匹配路径。到目前为止,看起来我将使用gjson来满足我的JSONPath需求,但它没有任何用于我在deepdash中使用的paths命令的内容。
我是否需要创建一个递归函数来自己构建这个JSONPath数组,或者有人知道可以生成类似内容的库吗?
例如:
{
"response": {
"results": [
{
"acctNum": 1234,
"someData": "something"
},
{
"acctNum": 5678,
"someData": "something2"
}
]
}
}
字符串
我将得到一个数组,格式如下:
[
"response.results[0].acctNum",
"response.results[0].someData",
"response.results[1].acctNum",
"response.results[1].someData"
]
型
然后我可以使用我的response.results[*].acctNum
过滤器,它在Regex中转换为response\.results\[.*\]\.acctNum
,以获得我的acctname字段。
从这个过滤后的数组中,我应该能够使用gjson获取实际值,处理它,然后设置新值(我在NodeJS中使用lodash)
1条答案
按热度按时间flvlnr441#
在GoLang中有许多JSONPath实现。在这方面我真的不能给出给予建议。
但是,我认为您需要的只是这个基本路径:
$..*
它应该在几乎任何能够返回路径而不是值的实现中返回:
字符串
如果我理解正确的话,这应该仍然可以使用你的方法使用RegEx过滤。
Go JSONPath实现: