js对象和json字符串互转

CloudGuru
• 阅读 11759

JSON.parse()

  • JSON.parse(): 接受一个 JSON 字符串并将其转换成一个js对象
  • 语法:JSON.parse(string, [callback])

    1. 参数string:是一个json格式的字符串
    2. 参数callback:可选参数,是一个回调函数

1. 基本使用

  • parse解析注意点:
// parse参数的两个必要条件:
1. 参数必须严格是json格式的字符串(也就说属性名必须带双引号) 
2. 参数必须使用单引号包裹起来,内部的属性名使用双引号包裹(总体就是单引号套双引号的方式)

// 1. 正确使用:
var str = '{"name":"小明","age":18}'
var obj = JSON.parse(str) 

typeof obj  // Object
obj            // obj: {name:"小明",age:18}


// 2. 可以递归解析:
var str = '{"status":"1","data":[{"tags":[{"name":"春季"}]}]}'
var obj = JSON.parse(str) 

typeof obj                  // Object
obj.data[0].tags[0].name    // "春季"
// obj = {
//     status: "1",
//     data: [{
//         tags: [{
//             name: "春季",
//         }]
//     }]
// }


// 错误示范1:属性名没有使用双引号
var str = '{name:"小明",age:18}'
var obj = JSON.parse(str)     // 报错

// 错误示范2:字符串参数没有使用单引号包裹
var str = "{"name":"小明","age":18}"
var obj = JSON.parse(str)     // 报错

2. 高级用法

  • JSON.parse(): 第二个参数是可选参数,是一个回调函数,它可以在返回之前转换对象值
// 将返回对象的属性值大写:
const user = {
  name: 'John',
  email: 'john@awesome.com',
  plan: 'Pro'
};
 
//
const userStr = JSON.stringify(user);
 
const newUserStr = JSON.parse(userStr, (key, value) => {
  if (typeof value === 'string') {
    return value.toUpperCase();
  }
  return value;
});
 
console.log(newUserStr); //{name: "JOHN", email: "JOHN@AWESOME.COM", plan: "PRO"} 

JSON.stringify()

  • JSON.stringify():接受一个 js 对象并将其转换为一个 JSON 字符串
  • 语法JSON.stringify(obj, [replacer], [space])

    1. obj参数:是一个js对象
    2. replacer:可选参数,如果是函数类型,则表示过滤作用;如果是数组,则出现在数组中的项被返回,数组相当于白名单。
    3. space:可选参数,传入间隔符为了增强可读性

1. 基本使用

var obj = {status:1,data:[{id:100391,tags:[{name:"春季"}]}]}

var jsonStr = JSON.stringify(obj)
// jsonStr: '{"status":"1","data":[{"id":100391,"tags":[{"name":"春季"}]}]}'


var obj1 = JSON.parse(jsonStr) 
// obj1: {status:1,data:[{id:100391,tags:[{name:"春季"}]}]}

2. 高级用法

// 示例1:当replacer是函数时:对user的每一项执行replacer函数,replacer函数返回undefined的项,则不放入stringify()的返回结果中。
// replacer相当于数组的filter方法
let user = {
  id: 229,
  name: 'John',
  email: 'john@awesome.com'
};
 

function replacer(key, value) {
  if (key === 'name') {
    return undefined;
  }
  return value;
}
 
let res = JSON.stringify(user, replacer);
console.log(res)    // {"id":229,"email":"john@awesome.com"}
// 示例2:当replacer为数组时:如果user中的某项出现在replacer数组中则返回user的这一项
// replacer数组相当于白名单

let user = {
  id: 229,
  name: 'John',
  email: 'john@awesome.com'
};
 
let replacer = ['name'];
let res = JSON.stringify(user, replacer);
console.log(res)        // {"name":"John"}
// 示例3:间隔符增强可读性
const user = {
  name: 'John',
  email: 'john@awesome.com',
  plan: 'Pro'
};
 
const userStr = JSON.stringify(user, null, '===');
// "{
// ==="name": "John",
// ==="email": "john@awesome.com",
// ==="plan": "Pro"
// }"

用JSON.stringify 来格式化对象

var censor = function(key,value){
    if(typeof(value) == 'function'){
         return Function.prototype.toString.call(value)
    }
    return value;
}
var foo = {bar:"1",baz:3,o:{name:'xiaoli',age:21,info:{sex:'男',getSex:function(){return 'sex';}}}};
console.log(JSON.stringify(foo,censor,4))


// 实际返回的字符串(备注是json字符串):
{
    "bar": "1",
    "baz": 3,
    "o": {
        "name": "xiaoli",
        "age": 21,
        "info": {
            "sex": "男",
            "getSex": "function(){return 'sex';}"
        }
    }
}
点赞
收藏
评论区
推荐文章
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Karen110 Karen110
4年前
盘点JavaScript中Eval函数的使用方法
大家好,我是进阶学习者。一、前言内建函数eval函数允许执行一个代码字符串。语法:letresulteval(code);例:letcode'alert("Hello")';eval(code);//Hello运行结果:代码字符串可能会比较长,包含换行符、函数声明和变量等。eval的结果是最后一条语句的结果。例:let
虾米大王 虾米大王
3年前
java代码013
code013.jsprequest对象获取请求参数处理页
Stella981 Stella981
4年前
Gson
Java对象和Json之间的互转,一般用的比较多的两个类库是Jackson和Gson,下面记录一下Gson的学习使用。基础概念: Serialization:序列化,使Java对象到Json字符串的过程。 Deserialization:反序列化,字符串转换成Java对象使用Maven管理Gson,pom.xml导入gson的依赖
Stella981 Stella981
4年前
Play For Scala 开发指南
PlayJson简介Play内置了一套JSON库,以帮助开发者简化JSON操作。目前Play的JSON库包含以下功能:Json对象与字符串之间互转Json对象和CaseClass之间互转Json数据校验Json格式之间互转Play的JSON库并不依赖于P
Wesley13 Wesley13
4年前
JSON学习笔记(二、语法)
JSON和js关系欲学JSON先学js,那么JSON和js的关系是什么样的呢?.JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台。.JSON语法是JavaScript语法的子集基本语法.数据在名称/值对中.数据由逗号分隔.大括号保存对象.中括号保
Wesley13 Wesley13
4年前
JSON 与 JS 对象的关系
很多人搞不清楚JSON和Js对象的关系,甚至连谁是谁都不清楚。简单来说:JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串。如varobj{a:'ni',b:'hao'};//这是一个对象,注意键名也是可以使用引号包裹的
Wesley13 Wesley13
4年前
JSON,异步加载(学习笔记)
JSON是一种传输数据的格式(以对象为样板,本质上就是对象,但用途有区别,对象就是本地用的,json是用来数据传输的,前端与后端的数据通信)JSON是静态类(不需要构造),类似于Math,内部有各种函数   1).JSON.parse();stringjson(解析成对象属性和属性值,可以进行调用)  2).JSON.stringi
Stella981 Stella981
4年前
JavaScript 转换数字为整数的方法
本文将会列举并说明JavaScript把一个number(或者numerical的对象)转换成一个整数相关方法。使用parseIntparseInt的语法如下:parseInt(string,radix)参数string的表示要解析的字符串,也可以是一个对象,会自动调用对象的toString函数得到要解析的字符
五、飞鹅官网API接口文档
接口列表1.获取网站信息请求方法:GET请求URL:/api/site/getSiteInfo请求参数无返回结果json"code":1,"data":"id":1,//id"title":"SampleSiteName",//网站名称"intro":"T