我的堆栈流量很大,之前从未发现需要提问,虽然这个主题有很多线索,但我似乎无法找到容易且有意义的东西。如果我遗漏了某些内容,请提供链接。
这里是:我试图在使用json的python客户端/服务器之间来回传递列表,但是我将问题压缩到一个块中来说明:
import json
testdata = ['word','is','bond', False, 6, 99]
# prints normal iterable list
print testdata
myjson = json.dumps(testdata)
#prints [u'word', u'is', u'bond', False, 6, 99], which contains unicode strings
print json.loads(myjson)
# Iterates over each character, since apparently, Python does recognize it is a list
for i in myjson:
print i
这似乎不对。我传入了一个可迭代的列表,然后我找到了一些不能用这种方式的东西。我已经看到很多答案表明我应该“处理unicode”这很好,如果我知道如何。要么我需要一种强制json加载为ascii或utf-8等的方法,或者允许python正常迭代包含unicode字符串的列表的方法。
谢谢!
答案 0 :(得分:2)
问题是你正在迭代myjson
字符串,而不是迭代列表json.loads(myjson)
的结果。
myjson = json.dumps(testdata)
mydata = json.loads(myjson)
#prints [u'word', u'is', u'bond', False, 6, 99], which contains unicode strings
print mydata
#prints ["word", "is", "bond", false, 6, 99], which is still just a string
print myjson
# Iterates over each character, since it's a string
for i in myjson:
print i
# Iterates over the list
for i in mydata:
print i
答案 1 :(得分:1)
json.dumps(testdata)
给你一个字符串......所以迭代字符串会给你个别字符。您的代码完全按照您的要求执行。
json.loads
不执行变量的就地修改 - 因此当您迭代它时myjson
仍然是一个字符串。