我正在将 40kb 的字典和列表字典编码为 json,然后通过 http 将其推送到 nosql 数据库。我已经使用了 jsonpickle.encode 和 json.dumps 模块来编码我的字典的内容,但是两者都导致了一个 http 错误。我尝试手动卷曲有问题的代码部分,结果是错误“-bash: syntax error near unexpected token `('”
这是一些示例代码:
import urllib2 , jsonpickle
url = "http://amazonaws.com/server/%s/_create" % item
data = jsonpickle.encode( some_dict_of_dicts_and_lists ) # also tried json.dumps here.
try:
req = urllib2.Request ( url , data , { 'Content-Type' : 'application/json' } )
f = urllib2.urlopen ( req )
except Exception as e:
print "Error: %s" %e
以上适用于将我的字典的某些部分输入到我的 nosql 数据库中。但是,当我通过字典的其他部分发送时,这会打印“错误:HTTP 错误 400:错误请求”。这对我来说意味着数据变量/字符串中的某些内容没有正确编码。为了获得 CURL 对此问题的响应,我尝试使用 CURL 处理以下代码:
item_id = item_dictionary [ 'id' ]
data = jsonpickle.encode( some_dict_of_dicts_and_lists ) # also tried json.dumps here.
command = 'curl -XPOST "http://amazonaws.com/server/%s/_create" -d '"%s"' % ( nsn_id , data )
os.system(command)
这会产生错误“sh: -c: line 0: syntax error near unexpected token `('”
如果我尝试在命令行中手动键入 curl 命令,则会收到以下一组错误:
curl: (6) Could not resolve host: material; 提供节点名或服务名,或未知
curl:(6)无法解析主机:项目;提供节点名或服务名,或未知
curl: (6) 无法解析主机:的;提供节点名或服务名,或未知
curl:(3) [globbing] 位置 146 处不匹配的右大括号/括号
{"error":"MapperParsingException[Failed to parse]; 嵌套:JsonParseException[在 VALUE_STRING\ 中的意外输入结束n 在 [来源:[B@2ff246ab;行:1,列:6519]];“,”状态“:400}
所以:
1)有没有更好的方法来确保json编码过程捕获使所有括号和单引号在它们前面用'\'格式化?我应该对所有这些进行替换吗?
2) 有没有一种好方法可以使用 urllib2 以更详细的方式找出导致此错误的原因,或者我是否需要从命令行执行 CURL 以获得 bash 类型错误?