美文网首页
带有function的JSON对象的序列化与还原

带有function的JSON对象的序列化与还原

作者: ayusong870 | 来源:发表于2021-01-24 20:48 被阅读0次

JSON对象的序列化与反序列化相信大家都很熟悉了。基本的api是JSON.parse与JSON.stringify.

var json={
    uiModule:'http://www.a.com',
    login:'true',
    mainSubjectId:3004,
    happydays:100,
    happyhours:1,
    userCount :200,
    itemCount:1000000,
    type:'all',
    mainSubjectId:3004,
    taglist:[
        {'tagName':'xiaoc','applyItemCount':20},
        {'tagName':'xiaoc','applyItemCount':20}
    ]
}

var s = JSON.stringify(json)
var json = JSON.parse(s)

ok 到现在为止都没啥问题,处理得很好,但是现在我有这么一个json对象

var json={
  name:'json',
  getName:function(){
     return this.name;   
  }
}

我们看下JSON.stringify(json)输出啥

"{"name":"json"}"

把getName弄丢了 ,怎么办呢?其实大家都没注意到JSON.stringify还有些参数

JSON.stringify(value [, replacer] [, space])

value

Required. A JavaScript value, usually an object or array, to be converted.

replacer

Optional. A function or array that transforms the results.

If replacer is a function, JSON.stringify calls the function, passing in the key and value of each member. The return value is used instead of the original value. If the function returns undefined, the member is excluded. The key for the root object is an empty string: "".

If replacer is an array, only members with key values in the array will be converted. The order in which the members are converted is the same as the order of the keys in the array. The replacer array is ignored when thevalue argument is also an array.

space

Optional. Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.

If space is omitted, the return-value text is generated without any extra white space.

If space is a number, the return-value text is indented with the specified number of white spaces at each level. Ifspace is greater than 10, text is indented 10 spaces.

If space is a non-empty string, such as '\t', the return-value text is indented with the characters in the string at each level.

If space is a string that is longer than 10 characters, the first 10 characters are used.
那我们现在就可以把函数也序列化了

var s=JSON.stringify(json, function(key, val) {
  if (typeof val === 'function') {
    return val + '';
  }
  return val;
});

ok现在我们已经成功的序列化带function的json对象了,接下来如何还原它呢?

JSON.parse(text [, reviver])

text

Required. A valid JSON string.

reviver

Optional. A function that transforms the results. This function is called for each member of the object. If a member contains nested objects, the nested objects are transformed before the parent object is. For each member, the following occurs:
If reviver returns a valid value, the member value is replaced with the transformed value.
If reviver returns the same value it received, the member value is not modified.
If reviver returns null or undefined, the member is deleted.

那么我们就可以这么来还原json对象

JSON.parse(s,function(k,v){
  if(v.indexOf&&v.indexOf('function')>-1){
     return eval("(function(){return "+v+" })()")
  }
  return v;
});

相关文章

  • 带有function的JSON对象的序列化与还原

    JSON对象的序列化与反序列化相信大家都很熟悉了。基本的api是JSON.parse与JSON.stringify...

  • Javascript学习笔记——6.9 序列化对象

    对象的序列化是指将对象转换为字符串和将字符串还原为对象。 内置函数JSON.stringify()和JSON.pa...

  • iOS JSON 数据解析

    (1)JSON数据->OC对象(反序列化) (2)OC对象->JSON对象(序列化) (3)OC对象和JSON数据...

  • JSON

    JS对象 与 JSON的区别 var user=JSON.parse(userJson,function(k,v)...

  • 序列化,序列化高级

    序列化 序列化:把对象(Dict)转成可传输数据(JSON) 反序列化:把传输数据(json)转成对象(Dict)...

  • FastJson的基本使用实践

    序列化一个对象成为JSON字符串 反序列化一个JSON字符串成为一个对象 数组序列化成为JSON字符串 JSON字...

  • python序列化与反序列化

    json序列化与反序列化 序列化:dumps()/dump(),将python中字典类型的对象序列化后,转化成js...

  • springboot整合redis

    1、添加依赖 相比以前这次就多了两个依赖redis和json的依赖,json的依赖用来序列化与反序列化Java对象...

  • DRF之序列化

    序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象。 序列化两大...

  • Android安卓开发 Gson使用教程

    Gson的序列化 多个对象转json Gson的反序列化,json转对象 对于数组类可以直接转。但对于集合类就必...

网友评论

      本文标题:带有function的JSON对象的序列化与还原

      本文链接:https://www.haomeiwen.com/subject/qaloxktx.html