python3处理不标准json数据-阿里云开发者社区

开发者社区> 方倍工作室> 正文

python3处理不标准json数据

简介: keywords: python jsonsource: http://txw1958.cnblogs.com/ 先看下JSON的语法规则: JSON 语法规则JSON 语法是 JavaScript 对象表示法语法的子集。
+关注继续查看

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))())

待续......

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【项目积累】对JSON数据的处理
<p><span style="font-family:楷体; font-family:楷体; font-size:19px; line-height:27px; widows:auto">   <strong>【项目简述】</strong></span><strong><span style="font-family:楷体; font-family:楷体; font-size:19px;
2829 0
Python3获取股票行情数据(中国个股/中国指数/全球指数)
#!/usr/local/bin/python3 #coding=utf-8 #source http://www.cnblogs.com/txw1958/ import os, io, sys, re, time, json, base64 import webbrowser, urllib.
1349 0
使用Boost.PropertyTree处理XML、JSON和INI数据
Boost.PropertyTree 应该是 Boost 1.41.0 开始正式加入 Boost 版本的。目前 ( 2010/02/28 ) 能下到的最新版本是 1.42.0。 主要作用/应用场合 Boost.PropertyTree 提供了一种结构化的数据存储容器。
1419 0
Python系列直播——深入Python与日志服务,玩转大规模数据分析处理实战
Python系列直播——深入Python与日志服务,玩转大规模数据分析处理实战
4837 0
Python 图像处理篇-利用opencv库展示本地图片实例演示
Python 图像处理篇-利用opencv库展示本地图片实例演示
6 0
python将AD7606B原始补码数据数组转换成原码数据数组并进行处理为电压值
python将AD7606B原始补码数据数组转换成原码数据数组并进行处理为电压值
41 0
+关注
方倍工作室
CSDN博客技术专家。已出版《微信公众平台开发最佳实践》第一版、第二版及第三版,《企业微信公众平台开发实战》等书籍。
541
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载