将json转换为格式化字符串

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

我想转换这个json:

{
        "rate_limit_by": 
            [{   "type": "IP", 
                "extract_from_header": "X-Forwarded-For"
            }]
    }

对此:

"{\"rate_limit_by\": [{\"type\": \"IP\", \"extract_from_header\": \"X-Forwarded-For\"}]}".

以便我可以将其作为请求中有效负载的一部分发送给Python

而且我已经尝试了多种相同的方法。 json.dumps无法正常工作,因为在这种情况下不会转义字符&.replace(“”“,r” \“”)无法正常工作,因为它会创建这样的字符串:

{\\"rate_limit_by\\": [{\\"type\\": \\"IP\\", \\"extract_from_header\\": \\"X-Forwarded-For\\"}]}

[以下是curl的示例,但我想使用python请求以特定格式发送数据。)我的上游期望以某种格式的数据,截止到现在,我正在向上游发送数据,如下所示:

curl -i --request POST --data "rule_name=only_ip" \
--data-binary "@data.txt" \
--url http://localhost:8001/plugin/rules

其中data.txt如下所示:

rule={
        "rate_limit_by": [
            { "type":"IP", "extract_from_header": "X-Forwarded-For" }
        ]
    }

正在尝试将其转换为:

curl -i --request POST -H 'Content-Type: application/json' --data-binary @data.json  http://localhost:8001/plugin/rules

data.json应该在哪里

   {
        "rule_name" : "test_ip",
        "rule":"{\"rate_limit_by\": [{\"type\": \"IP\", \"extract_from_header\": \"X-Forwarded-For\"}]}"
    }

现在,“ rule”的值是带有字符转义符的字符串。这正试图实现并正在使用python进行发布。

python json python-3.x nginx lua
2个回答
0
投票

您是说要以某种方式访问​​其中的项目吗?

您应该删除“ []”,因为该部分实际上没有意义。

import json
x = str({
        "rate_limit_by": 
            [{   "type": "IP", 
                "extract_from_header": "X-Forwarded-For"
            }]
    })

x = x.replace("[","")
x = x.replace("]","")
x = eval(x)
d = json.dumps(x)
l = json.loads(d)
l['rate_limit_by']['type']

这输出“ IP”。现在您有了所有需要的字典,称为l。


0
投票

所以您说的是想要一个被两次编码为JSON的字符串?为什么?如果是这样,请尝试以下操作。

import json

d = {
    "rate_limit_by": [{
        "type": "IP",
        "extract_from_header": "X-Forwarded-For"
    }]
}

s = json.dumps(d)
ss = json.dumps(s)

print({"rule_name": "test_ip", "rule": d})
print({"rule_name": "test_ip", "rule": s})
print({"rule_name": "test_ip", "rule": ss})
© www.soinside.com 2019 - 2024. All rights reserved.