【问题标题】:needed: simple way to force json to decode to "normal" iterable python lists需要:强制json解码为“正常”可迭代python列表的简单方法
【发布时间】:2013-08-27 03:20:10
【问题描述】:

我有大量的 stackoverflow 并且以前从未发现需要提出问题,虽然关于这个主题有很多线程,但我似乎无法找到简单且有意义的东西。如果我以某种方式错过了什么,请提供链接。

这里是:我正在尝试使用 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 字符串的列表的方法。

谢谢!

【问题讨论】:

    标签: python json list unicode iterable


    【解决方案1】:

    问题是您正在迭代字符串 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
    

    【讨论】:

    • 好的,它可以工作——这真的很简单。我讨厌我的第一个问题是如此愚蠢。
    • @domoarrigato:愚蠢的问题完全是你自己无法弄清楚的,因为它们太明显了,你没有注意到它们。我在这里回答你的问题是因为我正在从 "abc", "def" "ghi", "jkl" 类型的错误中休息,我盯着它看了半个小时,然后同事立即发现了它……
    【解决方案2】:

    json.dumps(testdata) 给你一个字符串...所以迭代字符串给你单个字符。您的代码完全按照您的要求执行。

    json.loads 不会对变量执行就地修改 - 所以myjson 在您迭代它时仍然是一个字符串。

    【讨论】:

    • abarnert 有点快 - 谢谢!
    猜你喜欢
    • 2013-08-07
    • 2020-08-23
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 2020-12-03
    • 2021-01-07
    • 2012-10-29
    相关资源
    最近更新 更多