• JSON字符串和JS对象之间的转换


    JSON字符串和JS对象之间的转换
    1 json字符串转换为js对象
    1.1 标准json格式字符串转换为Js对象 
    JSON字符串 str
    JSON.parse(str)
    eval(str)
    eval('('+str+')')
    eval('['+str+']')
    对象字符串
    "{"id":"001","name":"sanzhang"}"
     
    对应的json格式
    {"id":"001","name":"sanzhang"}
    Object {id: "001", name: "sanzhang"}
    SyntaxError: Unexpected token :
    Object {id: "001", name: "sanzhang"}
    [
    Object
    1. id: "001"
    2. name: "sanzhang"
    3. __proto__: Object
    ]
    数组字符串
    "[{"id":"001","name":"sanzhang"}]"
     
    对应的json格式
    [{"id":"001","name":"sanzhang"}]
    [
    Object
    1. id: "001"
    2. name: "sanzhang"
    3. __proto__: Object
    ]
    [
    Object
    1. id: "001"
    2. name: "sanzhang"
    3. __proto__: Object
    ]
    [
    Object
    1. id: "001"
    2. name: "sanzhang"
    3. __proto__: Object
    ]
    [
    Array[1]
    1. 0: Object
      1. id: "001"
      2. name: "sanzhang"
      3. __proto__: Object
    2. length: 1
    3. __proto__: Array[0]
    ]
    内嵌json子串
    "[{"id":"001","name":"sanzhang"},{"id":"{\"id1\":\"1\",\"id2\":\"2\"}"}]"
     
    对应的json格式
    [{"id":"001","name":"sanzhang"},{"id":"{"id1":"1","id2":"2"}"}]
    [
    Object
    1. id: "001"
    2. name: "sanzhang"
    3. __proto__: Object
    ,
    Object
    1. id: "{"id1":"1","id2":"2"}"
    2. __proto__: Object
    ]
    [
    Object
    1. id: "001"
    2. name: "sanzhang"
    3. __proto__: Object
    ,
    Object
    1. id: "{"id1":"1","id2":"2"}"
    2. __proto__: Object
    ]
    [
    Object
    1. id: "001"
    2. name: "sanzhang"
    3. __proto__: Object
    ,
    Object
    1. id: "{"id1":"1","id2":"2"}"
    2. __proto__: Object
    ]
    [
    Array[2]
    1. 0: Object
      1. id: "001"
      2. name: "sanzhang"
      3. __proto__: Object
    2. 1: Object
      1. id: "{"id1":"1","id2":"2"}"
      2. __proto__: Object
    3. length: 2
    4. __proto__: Array[0]
    ]
    内嵌json子串转换试验:
    JSON.parse(JSON.parse(str)[1].id)
    Object {id1: "1", id2: "2"}
    eval(JSON.parse(str)[1].id)
    SyntaxError: Unexpected token :
    eval('('+JSON.parse(str)[1].id+')')
    Object {id1: "1", id2: "2"}
    总结:标准json格式的字符串,使用JSON.parse转换为js对象是首选,eval(json对象字符串)会出错,eval('('+字符串+')')也是不错的选择,eval('['+字符串+']')会把json字符串外包一层数组。
     
     

    1.2 非标准json格式字符串转换为Js对象

    JSON字符串 str
    JSON.parse(str)
    eval(str)
    eval('('+str+')')
    对象键无引号
    "{id:"001",name:"sanzhang"}"
     
    对应的json格式
    {id:"001",name:"sanzhang"}
    SyntaxError: Unexpected token i
    SyntaxError: Unexpected token :
    Object {id: "001", name: "sanzhang"}
    对象键为单引号
    "{'id':"001",'name':"sanzhang"}"
     
    对应的json格式
    {'id':"001",'name':"sanzhang"}
    SyntaxError: Unexpected token '
    SyntaxError: Unexpected token :
    Object {id: "001", name: "sanzhang"}
    对象的值无引号
    "{"id":001,"name":sanzhang}"
     
    对应的json格式
    {"id":001,"name":sanzhang}
    SyntaxError: Unexpected number
    SyntaxError: Unexpected token :
    ReferenceError: sanzhang is not defined
    对象的值为单引号
    "{"id":'001',"name":'sanzhang'}"

    对应的json格式
    {"id":'001',"name":'sanzhang'}
    SyntaxError: Unexpected token '
    SyntaxError: Unexpected token :
    Object {id: "001", name: "sanzhang"}

    总结:非标准json格式的字符串,使用JSON.parse,eval(json对象字符串)都会出错,eval('('+字符串+')')是不错的选择。

     
    总之:标准json字符串使用JSON.parse或eval('('+str+')')进行转换,非标准的json字符串只能使用eval('('+str+')')进行尝试转换,另外jquery框架中的$.parseJSON和JSON.parse是一样的,eval的作用是把字符串当做js语句执行。
    js对象转换为json字符串
    obj = {id: "001", name: "sanzhang"}
    str = JSON.stringify(obj)
    "{"id":"001","name":"sanzhang"}"
    总结:js对象转换为json字符串,使用JSON.stringify(obj)即可

     

  • 相关阅读:
    BestCoder17 1001.Chessboard(hdu 5100) 解题报告
    codeforces 485A.Factory 解题报告
    codeforces 485B Valuable Resources 解题报告
    BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告
    codeforces 374A Inna and Pink Pony 解题报告
    codeforces 483B Friends and Presents 解题报告
    BestCoder15 1002.Instruction(hdu 5083) 解题报告
    codeforces 483C.Diverse Permutation 解题报告
    codeforces 483A. Counterexample 解题报告
    NSArray中地内存管理 理解
  • 原文地址:https://www.cnblogs.com/hdwang/p/4554079.html
Copyright © 2020-2023  润新知