zoukankan      html  css  js  c++  java
  • 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))())

    待续......

  • 相关阅读:
    luogu P2685 [USACO07OPEN]抓牛Catch That Cow
    codevs 2021 中庸之道
    1018. 锤子剪刀布 (20)
    1017. A除以B (20)
    1016. 部分A+B (15)
    1013. 数素数 (20)
    1011. A+B和C (15)
    《C语言程序设计(第四版)》阅读心得(三)
    《C语言程序设计(第四版)》阅读心得(二)
    1008. 数组元素循环右移问题 (20)
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468203.html
Copyright © 2011-2022 走看看