我见过很多项目使用simplejson
模块而不是json
标准库中的模块.此外,还有许多不同的simplejson
模块.为什么要使用这些替代品,而不是标准库中的替代品?
为什么json序列化不适用于datetime对象.据我了解json序列化,任何对象的基本思想都可以调用 __str__
内置函数,然后将你获得的对象作为响应进行urlencode.但是在datetime的情况下,我得到以下错误
TypeError: datetime.datetime(2012, 5, 23, 18, 38, 23, 37566) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
虽然有__str__
一种方法可以对已经可用的物体进行字符串化,但似乎有意识地决定不这样做,为什么会出现这种情况呢?
我正在尝试用Python将数据编码为JSON,而且我遇到了很多麻烦.我认为这个问题只是一个误解.
我对Python比较陌生,从来没有真正熟悉各种Python数据类型,所以这很可能让我感到困惑.
目前,我正在声明一个列表,循环遍历另一个列表,并在另一个列表中附加一个列表:
import simplejson, json
data = [['apple', 'cat'], ['banana', 'dog'], ['pear', 'fish']]
x = simplejson.loads(data)
# >>> typeError: expected string or buffer..
x = simplejson.dumps(stream)
# >>> [["apple", "cat"], ["banana", "dog"], ["pear", "fish"]]
# - shouldn't JSON encoded strings be like: {{"apple":{"cat"},{"banana":"dog"}}
Run Code Online (Sandbox Code Playgroud)
所以我要么:
当我尝试从JSON字符串中检索值时,它会给我一个错误:
data = json.loads('{"lat":444, "lon":555}')
return data["lat"]
Run Code Online (Sandbox Code Playgroud)
但是,如果我迭代数据,它会给我元素(lat
和lon
),但不是值:
data = json.loads('{"lat":444, "lon":555}')
ret = ''
for j in data:
ret = ret + ' ' + j
return ret
Run Code Online (Sandbox Code Playgroud)
哪个回报: lat lon
我需要什么做的就是值lat
和lon
?(444
和555
)
使用simplejson序列化numpy数组的最有效方法是什么?
我想这必须有一个简单的答案,但我正在努力:我想拿一个url(输出json)并在python中的可用字典中获取数据.我被困在最后一步.
>>> import urllib2
>>> import simplejson
>>> req = urllib2.Request("http://vimeo.com/api/v2/video/38356.json", None, {'user-agent':'syncstream/vimeo'})
>>> opener = urllib2.build_opener()
>>> f = opener.open(req)
>>> f.read() # this works
'[{"id":"38356","title":"Forgetfulness - Billy Collins Animated Poetry","description":"US Poet Laureate Billy Collins reads his poem ","url":"http:\\/\\/vimeo.com\\/38356","upload_date":"2006-01-24 15:21:03","thumbnail_small":"http:\\/\\/80.media.vimeo.com\\/d1\\/5\\/47\\/74\\/thumbnail-4774968.jpg","thumbnail_medium":"http:\\/\\/80.media.vimeo.com\\/d1\\/5\\/46\\/85\\/thumbnail-4685118.jpg","thumbnail_large":"http:\\/\\/images.vimeo.com\\/87\\/39\\/873998\\/873998_640x480.jpg","user_name":"smjwt","user_url":"http:\\/\\/vimeo.com\\/smjwt","user_portrait_small":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.30.jpg","user_portrait_medium":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.75.jpg","user_portrait_large":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.100.jpg","user_portrait_huge":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.300.jpg","stats_number_of_likes":"281","stats_number_of_plays":"9173","stats_number_of_comments":23,"duration":"112","width":"320","height":"240","tags":"poetry, poet, online poetry, famous poet, video poetry, modern poetry, famous poem, poetry sites, poetry websites, audio poetry, american poet, animation clips, american poetry, free poetry sites, animation art, free poetry, animated clips, poem, poet laureate"}]'
>>> simplejson.load(f)
Traceback (most …
Run Code Online (Sandbox Code Playgroud) http://pypi.python.org/pypi/simplejson
我只是潜入Python世界,并希望制作一个简单的twitter应用程序,需要安装simplejson但不知道如何设置它并让它工作..
我在Windows系统上
我正在尝试使用python SimpleHTTPServer构建一个简单的REST服务器.我在发布消息时遇到问题.如果我做得对,请告诉我.
from SimpleHTTPServer import SimpleHTTPRequestHandler
import SocketServer
import simplejson
class S(SimpleHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
print "got get request %s" % (self.path)
if self.path == '/':
self.path = '/index.html'
return SimpleHTTPRequestHandler.do_GET(self)
def do_POST(self):
print "got post!!"
content_len = int(self.headers.getheader('content-length', 0))
post_body = self.rfile.read(content_len)
test_data = simplejson.loads(post_body)
print "post_body(%s)" % (test_data)
return SimpleHTTPRequestHandler.do_POST(self)
def run(handler_class=S, port=80):
httpd = SocketServer.TCPServer(("", port), handler_class)
print 'Starting httpd...'
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)
index.html文件
<html>
<title>JSON TEST PAGE</title>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript"> …
Run Code Online (Sandbox Code Playgroud) 我正在运行Python 2.7(x64 Linux)并尝试将其转换dict
为JSON对象.
>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=0, releaselevel='final', serial=0)
Run Code Online (Sandbox Code Playgroud)
我试图使用simplejson
(json
从标准库回退)但我收到以下错误:
>>> try: import simplejson as json
... except ImportError: import json
...
>>> metadata = dict()
>>> metadata['foo'] = 'bar'
>>> print metadata
{'foo': 'bar'}
>>> json.dumps(metadata)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'dumps'
Run Code Online (Sandbox Code Playgroud)
使用json
或simplejson
使用Python 2.7 时是否有一些明显的缺失?
我正在尝试使用JSON(使用simplejson)序列化python对象列表,并且得到对象"不是JSON可序列化"的错误.
该类是一个简单的类,其字段只有整数,字符串和浮点数,并且从一个父超类继承类似的字段,例如:
class ParentClass:
def __init__(self, foo):
self.foo = foo
class ChildClass(ParentClass):
def __init__(self, foo, bar):
ParentClass.__init__(self, foo)
self.bar = bar
bar1 = ChildClass(my_foo, my_bar)
bar2 = ChildClass(my_foo, my_bar)
my_list_of_objects = [bar1, bar2]
simplejson.dump(my_list_of_objects, my_filename)
Run Code Online (Sandbox Code Playgroud)
其中foo,bar是我上面提到的简单类型.唯一棘手的问题是ChildClass有时会有一个字段引用另一个对象(不是ParentClass或ChildClass的类型).
使用simplejson将此序列化为json对象的最简单方法是什么?将其序列化为字典是否足够?简单地为ChildClass 编写一个dict方法是最好的方法吗?最后,引用另一个对象的字段是否会使事情变得复杂化?如果是这样,我可以重写我的代码只在类中有简单的字段(如字符串/浮点数等)
谢谢.