[CPyUG] 处理json问题

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

[CPyUG] 处理json问题

树上蹭灰
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 处理json问题

sj l
d.get(key, None)

2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 处理json问题

小熊-2
json 是字符串,直接使用字符串查找也行。
In [25]: d={'t' : 'a'}

In [26]: c=json.dumps(d)

In [27]: c.find('"t":')
Out[27]: 1

In [28]: c.find('"d":')
Out[28]: -1


在 2011年12月22日 上午9:45,sj l <[hidden email]>写道:
d.get(key, None)


2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 处理json问题

树上蹭灰
d.get(key, None)
这个方法好。

find方式还是下策。

在 2011年12月22日 上午9:54,小熊 <[hidden email]>写道:
json 是字符串,直接使用字符串查找也行。
In [25]: d={'t' : 'a'}

In [26]: c=json.dumps(d)

In [27]: c.find('"t":')
Out[27]: 1

In [28]: c.find('"d":')
Out[28]: -1


在 2011年12月22日 上午9:45,sj l <[hidden email]>写道:

d.get(key, None)


2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 处理json问题

树上蹭灰
那么我们变换一下:
 d={'t':[{"e":"tt"},{"f":"re"}]}

这个时候要获取e的value,不用循环,使用get有方法么?


在 2011年12月22日 上午10:23,树上蹭灰 <[hidden email]>写道:
d.get(key, None)
这个方法好。

find方式还是下策。

在 2011年12月22日 上午9:54,小熊 <[hidden email]>写道:

json 是字符串,直接使用字符串查找也行。
In [25]: d={'t' : 'a'}

In [26]: c=json.dumps(d)

In [27]: c.find('"t":')
Out[27]: 1

In [28]: c.find('"d":')
Out[28]: -1


在 2011年12月22日 上午9:45,sj l <[hidden email]>写道:

d.get(key, None)


2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing



--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 处理json问题

piglei
要么就当字符串处理,要么就必须循环

在 2011年12月22日 上午10:27,树上蹭灰 <[hidden email]>写道:
那么我们变换一下:
 d={'t':[{"e":"tt"},{"f":"re"}]}

这个时候要获取e的value,不用循环,使用get有方法么?


在 2011年12月22日 上午10:23,树上蹭灰 <[hidden email]>写道:

d.get(key, None)
这个方法好。

find方式还是下策。

在 2011年12月22日 上午9:54,小熊 <[hidden email]>写道:

json 是字符串,直接使用字符串查找也行。
In [25]: d={'t' : 'a'}

In [26]: c=json.dumps(d)

In [27]: c.find('"t":')
Out[27]: 1

In [28]: c.find('"d":')
Out[28]: -1


在 2011年12月22日 上午9:45,sj l <[hidden email]>写道:

d.get(key, None)


2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing



--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 处理json问题

小熊-2
如果json 很长, 确实find比较慢。 不建议使用。

在 2011年12月22日 上午10:47,piglei <[hidden email]>写道:
要么就当字符串处理,要么就必须循环

在 2011年12月22日 上午10:27,树上蹭灰 <[hidden email]>写道:

那么我们变换一下:
 d={'t':[{"e":"tt"},{"f":"re"}]}

这个时候要获取e的value,不用循环,使用get有方法么?


在 2011年12月22日 上午10:23,树上蹭灰 <[hidden email]>写道:

d.get(key, None)
这个方法好。

find方式还是下策。

在 2011年12月22日 上午9:54,小熊 <[hidden email]>写道:

json 是字符串,直接使用字符串查找也行。
In [25]: d={'t' : 'a'}

In [26]: c=json.dumps(d)

In [27]: c.find('"t":')
Out[27]: 1

In [28]: c.find('"d":')
Out[28]: -1


在 2011年12月22日 上午9:45,sj l <[hidden email]>写道:

d.get(key, None)


2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing



--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 处理json问题

树上蹭灰
yes。

在 2011年12月22日 上午11:18,小熊 <[hidden email]>写道:
如果json 很长, 确实find比较慢。 不建议使用。

在 2011年12月22日 上午10:47,piglei <[hidden email]>写道:

要么就当字符串处理,要么就必须循环

在 2011年12月22日 上午10:27,树上蹭灰 <[hidden email]>写道:

那么我们变换一下:
 d={'t':[{"e":"tt"},{"f":"re"}]}

这个时候要获取e的value,不用循环,使用get有方法么?


在 2011年12月22日 上午10:23,树上蹭灰 <[hidden email]>写道:

d.get(key, None)
这个方法好。

find方式还是下策。

在 2011年12月22日 上午9:54,小熊 <[hidden email]>写道:

json 是字符串,直接使用字符串查找也行。
In [25]: d={'t' : 'a'}

In [26]: c=json.dumps(d)

In [27]: c.find('"t":')
Out[27]: 1

In [28]: c.find('"d":')
Out[28]: -1


在 2011年12月22日 上午9:45,sj l <[hidden email]>写道:

d.get(key, None)


2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing



--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re:Re: [CPyUG] 处理json问题

智障
以俺的经验,推荐一下ElementTree。
处理过淘宝和疼讯返回的json,都会load异常。


在 2011-12-22 11:31:39,"树上蹭灰" <[hidden email]> 写道:
yes。

在 2011年12月22日 上午11:18,小熊 <[hidden email]>写道:
如果json 很长, 确实find比较慢。 不建议使用。

在 2011年12月22日 上午10:47,piglei <[hidden email]>写道:

要么就当字符串处理,要么就必须循环

在 2011年12月22日 上午10:27,树上蹭灰 <[hidden email]>写道:

那么我们变换一下:
 d={'t':[{"e":"tt"},{"f":"re"}]}

这个时候要获取e的value,不用循环,使用get有方法么?


在 2011年12月22日 上午10:23,树上蹭灰 <[hidden email]>写道:

d.get(key, None)
这个方法好。

find方式还是下策。

在 2011年12月22日 上午9:54,小熊 <[hidden email]>写道:

json 是字符串,直接使用字符串查找也行。
In [25]: d={'t' : 'a'}

In [26]: c=json.dumps(d)

In [27]: c.find('"t":')
Out[27]: 1

In [28]: c.find('"d":')
Out[28]: -1


在 2011年12月22日 上午9:45,sj l <[hidden email]>写道:

d.get(key, None)


2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing



--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: python-cn+[hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html


--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: Re: [CPyUG] 处理json问题

树上蹭灰

The Element type is a simple but flexible container object, designed to store hierarchical data structures, such as simplified XML infosets, in memory. The element type can be described as a cross between a Python list and a Python dictionary.

The ElementTree wrapper type adds code to load XML files as trees of Element objects, and save them back again.



get方法已经让我很爽了。



在 2011年12月22日 下午12:19,智障 <[hidden email]>写道:
以俺的经验,推荐一下ElementTree。
处理过淘宝和疼讯返回的json,都会load异常。


在 2011-12-22 11:31:39,"树上蹭灰" <[hidden email]> 写道:

yes。

在 2011年12月22日 上午11:18,小熊 <[hidden email]>写道:
如果json 很长, 确实find比较慢。 不建议使用。

在 2011年12月22日 上午10:47,piglei <[hidden email]>写道:

要么就当字符串处理,要么就必须循环

在 2011年12月22日 上午10:27,树上蹭灰 <[hidden email]>写道:

那么我们变换一下:
 d={'t':[{"e":"tt"},{"f":"re"}]}

这个时候要获取e的value,不用循环,使用get有方法么?


在 2011年12月22日 上午10:23,树上蹭灰 <[hidden email]>写道:

d.get(key, None)
这个方法好。

find方式还是下策。

在 2011年12月22日 上午9:54,小熊 <[hidden email]>写道:

json 是字符串,直接使用字符串查找也行。
In [25]: d={'t' : 'a'}

In [26]: c=json.dumps(d)

In [27]: c.find('"t":')
Out[27]: 1

In [28]: c.find('"d":')
Out[28]: -1


在 2011年12月22日 上午9:45,sj l <[hidden email]>写道:

d.get(key, None)


2011/12/22 树上蹭灰 <[hidden email]>
能不能不是load成字典,而直接处理json对象呢?
一般做法都是把json loads(data)为字典,然后在用字典方法处理。
但是如果json的key动态的,意味着有时候约定的key没有出现在这次处理的json中,这个时候不得不做异常处理。

而有没有类似java处理json方法呢,不存在的key就返回None,而不是抛出异常?

>>> d={"t":"aa"}
>>> print d
{'t': 'aa'}
>>> print d['d']
aa
>>> print d['d']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'


目前做法是自己写个处理方法,key不存在,返回None,一样可以满足需求。

这个只是提出讨论。


--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing



--
--
树上@Beijing
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: python-cn+[hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html


--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
--
树上@Beijing

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html