代码之家  ›  专栏  ›  技术社区  ›  deostroll

将json字符串转换为python对象

  •  42
  • deostroll  · 技术社区  · 14 年前

    是否可以将json字符串(例如,从twitter搜索json服务返回的字符串)转换为简单的字符串对象。下面是json服务返回的数据的一个小表示:

    {
    results:[...],
    "max_id":1346534,
    "since_id":0,
    "refresh_url":"?since_id=26202877001&q=twitter",
    .
    .
    .
    }
    

    假设我以某种方式将结果存储在某个变量中, 目标 . 我希望得到如下合适的值:

    print obj.max_id
    print obj.since_id
    

    我试过用 simplejson.load() json.load() 但它给了我一个错误 'str' object has no attribute 'read'

    3 回复  |  直到 14 年前
        1
  •  88
  •   Ben James    14 年前

    我试过用 simplejson.load() json.load() 但它给了我一个错误 'str' object has no attribute 'read'

    要从字符串加载,请使用 json.loads() (注意“s”)。

    更有效的方法是,跳过将响应读入字符串的步骤,只需将响应传递给 json.load文件()

        2
  •  0
  •   Rex Fender Baird    9 年前

    如果您不知道数据是文件还是字符串。。。。使用

    import StringIO as io
    youMagicData={
    results:[...],
    "max_id":1346534,
    "since_id":0,
    "refresh_url":"?since_id=26202877001&q=twitter",
    .
    .
    .
    }
    
    magicJsonData=json.loads(io.StringIO(str(youMagicData)))#this is where you need to fix
    print magicJsonData
    #viewing fron the center out...
    #youMagicData{}>str()>fileObject>json.loads
    #json.loads(io.StringIO(str(youMagicData))) works really fast in my program and it would work here so stop wasting both our reputation here and stop down voting because you have to read this twice 
    

    https://docs.python.org/3/library/io.html#text-i-o

    json.loads文件从python内置库中,json.loads文件需要一个file对象,并且不检查它传递的内容,因此它仍然对您传递的内容调用read函数,因为file对象只在您调用read()时放弃数据。因为内置的string类没有read函数,所以我们需要一个包装器。所以斯特林吉奥。斯特林吉奥简言之,子类的字符串类和文件类和啮合的内部工作听到我的低细节重建 https://gist.github.com/fenderrex/843d25ff5b0970d7e90e6c1d7e4a06b1 因此,在所有这些的结尾,它就像写一个ram文件,并在一行jsoning出来。。。。