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

先看下JSON的语法规则:

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

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组
  • JSON 名称/值对
    JSON 数据的书写格式是:名称/值对。
    名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

    "firstName" : "John"

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

    firstName = "John"

    JSON 值
    JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • 现在有这样一个数据,如下所示:

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

    待续......

    使用ajax往后台传输json数据SpringMVC的RequestBody自动转换 前端控制器报400错误
    使用ajax往后台传输json数据SpringMVC的RequestBody自动转换 前端控制器报400错误
    【Python】【MySQL】Python将JSON数据以文本形式存放到MySQL的Text类型字段中
    【Python】【MySQL】Python将JSON数据以文本形式存放到MySQL的Text类型字段中
    java202304java学习笔记第六十二天-ssm-页面跳转-回显数据json格式字符串
    java202304java学习笔记第六十二天-ssm-页面跳转-回显数据json格式字符串