python3处理不标准json数据

keywords: python json
source: http://txw1958.cnblogs.com/

先看下JSON的语法规则:

JSON 语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"firstName" : "John"

这很容易理解,等价于这条 JavaScript 语句:

firstName = "John"

JSON 值
JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

 

现在有这样一个数据,如下所示:

{
    url: 'http://txw1958.cnblogs.com',
    uid: 100000
}

它的key不带引号,另外url的值 http://txw1958.cnblogs.com 是单引号,不是双引号
在网站 http://jsonlint.com/ 使用JSON验证器 验证一下,第一个错误就是url不是string类型,不认识你老人家

Results
Parse error on line 1:
{    url: 'http: //txw195
-----^
Expecting 'STRING', '}'

下面这条语句可以将这样的不规则json转换成规则的dict格式

eval(blog, type('Dummy', (dict,), dict(__getitem__=lambda s,n:n))())

 

看结果

U:\>python3
Python 3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> blog = '''
... {
...     url: 'http://txw1958.cnblogs.com',
...     uid: 100000
... }
... '''
>>>
>>> type(blog)
<class 'str'>
>>>
>>> agent = eval(blog, type('Dummy', (dict,), dict(__getitem__=lambda s,n:n))())
>>>
>>> type(agent)
<class 'dict'>
>>>
>>> agent
{'url': 'http://txw1958.cnblogs.com', 'uid': 100000}
>>>

 

分析

eval(blog, type('Dummy', (dict,), dict(__getitem__=lambda s,n:n))())

待续......

 

 

 

时间: 2024-11-05 06:28:45

python3处理不标准json数据的相关文章

《Python Cookbook(第3版)中文版》——6.2 读写JSON数据

6.2 读写JSON数据 6.2.1 问题 我们想读写以JSON(JavaScript Object Notation)格式编码的数据. 6.2.2 解决方案 json模块中提供了一种简单的方法来编码和解码JSON格式的数据.这两个主要的函数就是json.dumps()以及json.loads().这两个函数在命名上借鉴了其他序列化处理库的接口,比如pickle.下面的示例展示了如何将Python数据结构转换为JSON: import json data = { 'name' : 'ACME',

浅谈PHP中JSON数据操作

  本文的知识点:1.JSON数据格式介绍,2.对数据编码成JSON格式,3.对JSON数据进行解码,并操作,有需要的小伙伴可以参考下. JSON,全称是JavaScript Object Notation.它是基于JavaScript编程语言ECMA-262 3rd Edition-December 1999标准的一种轻量级的数据交换格式,主要用于跟服务器进行交换数据.跟XML相类似,它独立语言,在跨平台数据传输上有很大的优势 新建文件json.php,先做encode操作: ? 1 2 3

httpwebrequest-C#获取访问网页Json数据

问题描述 C#获取访问网页Json数据 使用http://r.qzone.qq.com/cgi-bin/tfriend/friend_mngfrd_get.cgi?uin=441212678&rd=0.3932640394195914&g_tk=450427580&fupdate=1类似的代码可以返回QQ好友列表的Json数据,一个笨的办法是Ctrl+A全选复制然后粘贴到记事本中再进行进一步处理,我想让HttpWebRequest对象获取返回的数据字符串,比如({"&qu

浅谈PHP中JSON数据操作_php技巧

JSON,全称是JavaScript Object Notation.它是基于JavaScript编程语言ECMA-262 3rd Edition-December 1999标准的一种轻量级的数据交换格式,主要用于跟服务器进行交换数据.跟XML相类似,它独立语言,在跨平台数据传输上有很大的优势 新建文件json.php,先做encode操作: //encode //生成JSON格式数据 $arr = array(1,2,3,4,5,6,7,8,9,'Hello','PHP'); echo jso

探究Android系统中解析JSON数据的方式_java

前言喜欢在前言里讲一下自己的现状,或许能有共鸣的同学,更多的是留给自己一个纪念,几个月或者几年再回来看的时候还是会很有感慨.今天说说语言,json这种数据格式之前我做服务器端的时候天天接触,天真的以为json的世界里只有php的json_encode和json_decode,今天当我做客户端的时候,竟然将近一个多小时才搞定json的解析.这里我不是抨击php好坏,只是想说多学点东西,看看你不熟悉的领域,方能开阔自己的视野,方能知道天外有天,方能知道当初你看不上的工作其实你也不一定能很好的完成,扯

ios开发-【急】POST请求头可以是JSON数据吗?iOS

问题描述 [急]POST请求头可以是JSON数据吗?iOS 开发-[急]POST请求头可以是JSON数据吗?iOS-post请求传递json参数"> 我拿到手接口就是这样的,POST请求,请求头是JSON数据,请求头是URL的话我还会些,请求头是JSON数据该怎么操作? 疯了,项目很紧,UI什么都做好了,接口这就卡住了. 解决方案 可以http://blog.sina.com.cn/s/blog_6e0febb10101g64c.html 解决方案二: 这是安卓端之前用的,iOS可以用这种

ajax-Ajax返回接送数据。显示不是json数据

问题描述 Ajax返回接送数据.显示不是json数据 我看了下这是json的格式,为什么提示为不是json格式 解决方案 你输出的是字符串,不是json对象,要eval或者JSON.parse转成json对象 解决方案二: 你看看你remarks里面是不是有换行符这些,然后给替换掉.建议你把json串拷贝出来,用校验格式弄下,一下子就看出来了.http://www.bejson.com/ 解决方案三: ajax返回json数据Spring MVC中ajax返回json数据ajax处理返回的jso

Knockout应用开发指南 第六章:加载或保存JSON数据

原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多数的Ajax应用程序也是使用这种格式.   加载或保存数据 Knockout不限制你用任何技术加载和保存数据.你可以使用任何技术和服务器来交互.用的最多的是使用jQuery的Ajax帮助,例如:getJSON,post和ajax.你

jQuery通过ajax方法获取json数据不执行success的原因及解决方法_jquery

1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准写法,导致总是执行error回调方法 解决方案:使json格式务必符合下述3个标准写法: 1)键名称:用双引号括起: 2)字符串:用双引号括起: 3)数字,布尔值不需要使用双引号括起 : 注意:一定是双括号! 2.jQuery中ajax使用json数据类型总是跳过success执行error语句 执