为啥 JSON.stringify 不显示作为函数的对象属性?

     2023-03-05     165

关键词:

【中文标题】为啥 JSON.stringify 不显示作为函数的对象属性?【英文标题】:Why doesn't JSON.stringify display object properties that are functions?为什么 JSON.stringify 不显示作为函数的对象属性? 【发布时间】:2012-05-30 13:13:44 【问题描述】:

为什么 JSON.stringify() 不显示 prop2?

var newObj = 
  prop1: true,
  prop2: function()
    return "hello";
  ,
  prop3: false
;

alert( JSON.stringify( newObj ) ); // prop2 appears to be missing

alert( newObj.prop2() ); // prop2 returns "hello"

for (var member in newObj) 
    alert( member + "=" + newObj[member] ); // shows prop1, prop2, prop3

JSFIDDLE:http://jsfiddle.net/egret230/efGgT/

【问题讨论】:

@BrandtSolovij:函数就是对象:尝试运行(function() ) instanceof Object 【参考方案1】:

因为JSON 不能存储函数。根据规范,值必须是以下之一:

(来源:json.org)


附带说明,此代码将使JSON.stringify 注意到的功能:

Function.prototype.toJSON = function()  return "Unstorable function" 

【讨论】:

那么在这种情况下,JSON不能存储undefined? @Derek:正确。我认为JSON.stringify 将其转换为null @Derek: JSON.stringify 省略具有 undefined 值的成员。设置为 undefined 的变量与从未设置过的变量没有区别。 @apsillers: ...至少从 JSON 视图来看。将属性设置为 undefined 将创建该属性。 Function.prototype.toJSON 不错!【参考方案2】:

它不应该对方法(或任何函数)进行字符串化 - 特别是因为大多数内置对象的方法(以及任何用户定义对象的原型)都是本机代码。

如果您真的需要它来打印您的方法,您可以覆盖对象的 .toString 方法,但是当您在字符串化输出上调用 JSON.parse 时,它​​会将方法视为只是一个字符串,为了能够将其作为函数调用,您必须 eval 它 - 通常不推荐这种做法。

【讨论】:

【参考方案3】:

这是使用 .prototype 的另一种方式。您可以添加一个函数来字符串化

JSON.stringify(obj, function(k, v) 
  if (typeof v === 'function') 
    return v + '';
  
  return v;
);

【讨论】:

为啥 JSON.stringify 为似乎具有属性的对象返回空对象表示法“”?

】为啥JSON.stringify为似乎具有属性的对象返回空对象表示法“”?【英文标题】:WhydoesJSON.stringifyreturnemptyobjectnotation""foranobjectthatseemstohaveproperties?为什么JSON.stringify为似乎具有属性的对象返回空对象表示法“”?【发布时... 查看详情

JSON.stringify 深层对象

】JSON.stringify深层对象【英文标题】:JSON.stringifydeepobjects【发布时间】:2012-12-0110:13:23【问题描述】:我需要一个从任何参数构建JSON有效字符串的函数,但是:通过不添加两次对象来避免递归问题通过截断超过给定深度来避免... 查看详情

如何获取 JSON stringify 的错误消息?

】如何获取JSONstringify的错误消息?【英文标题】:HowtogettheerrormessageforJSONstringify?【发布时间】:2016-06-0719:49:33【问题描述】:假设我有一个这样的对象varobj="name":"arun"age当我尝试JSON.stringify(obj)时,我会收到一个错误,因为obj不... 查看详情

为啥 TypeError 上的 JSON.stringify 返回一个空对象 [重复]

】为啥TypeError上的JSON.stringify返回一个空对象[重复]【英文标题】:WhydoesJSON.stringifyonTypeErrorreturnanemptyobject[duplicate]为什么TypeError上的JSON.stringify返回一个空对象[重复]【发布时间】:2016-03-2118:22:09【问题描述】:我正在使用节点4.... 查看详情

json.stringify()的使用

参考技术A复制粘贴一下JSON.stringify()三个参数的含义:返回值:返回包含JSON文本的字符串。从上面的参数说明中可以看到,第二个参数可以是一个函数或者数组,这给了我们很大的发挥空间。stringify()的第一个和第三个参数都好... 查看详情

JSON.stringify() <input> 值作为数字?

】JSON.stringify()<input>值作为数字?【英文标题】:JSON.stringify()<input>valuesasnumbers?【发布时间】:2013-08-2014:32:27【问题描述】:我在html&lt;input&gt;s上使用JSON.stringify()像这样通过websocket发送:JSON.stringify(numberValue:$(\'#nu... 查看详情

json.stringify函数

摘抄,好酷的json.stringifyJSON.stringify函数(JavaScript) 将JavaScript值转换为JavaScript对象表示法(Json)字符串。语法   JSON.stringify(value[,replacer][,space])参数 value必需。  要转换的JavaScript值(通常 查看详情

json.stringify(),json.parse(),tojson()方法使用

JSON.stringify():将value(Object,Array,String,Number...)序列化为JSON字符串JSON.parse():将JSON数据解析为js原生值toJSON(),作为JSON.stringify中第二个参数(函数过滤器)补充,理解内部顺序很重要。假设把一个对象传入JSON.stringify()序列化对象的顺序如... 查看详情

json.stringify函数

作用:将对象(JSON对象)转换成字符串(JSON字符串)例子:varperson=newObject();person.name="zhangan";person.age="20";console.info(person);//Object{name:"zhangan",age:"20"}console.info(JSON.stringify(person));//{"name":"zhanga 查看详情

为啥不等待函数作为承诺?

】为啥不等待函数作为承诺?【英文标题】:Whyisafunctionnotawaitedasapromise?为什么不等待函数作为承诺?【发布时间】:2022-01-0909:33:11【问题描述】:我有一个导出承诺的组件MicButtons.jsimportVoicefrom\'react-native-voice\'exportconstMicButton=as... 查看详情

jquery解决ie6、7、8不能使用json.stringify函数的问题

...数将JSON对象转换成JSON字符串,解决IE6、7、8不能使用JSON.stringify函数的问题!复制代码代码如下:<!--[ifltIE9]><scriptsrc="json2.js"></script><![endif]-->这样JSON.stringify便可以正常使用!得到JSON字符串后传回服务器... 查看详情

JavaScript 中 JSON.stringify 中的第二个参数

】JavaScript中JSON.stringify中的第二个参数【英文标题】:SecondargumentinJSON.stringifyinJavaScript【发布时间】:2013-07-0610:20:20【问题描述】:在JavaScript的JSON.stringify()函数中,我偶尔会看到如下语法:JSON.stringify(obj,null,4)但是,我不知道... 查看详情

JSON stringify 已将 json 字符串作为值的对象

】JSONstringify已将json字符串作为值的对象【英文标题】:JSONstringifyobjectswithjsonstringsalreadyasvalues【发布时间】:2017-11-1317:33:10【问题描述】:可能是重复的问题,但找不到答案。我想对包含一些JSON字符串作为值的javascript对象进行... 查看详情

为啥不应该使用 Number 作为构造函数? [复制]

】为啥不应该使用Number作为构造函数?[复制]【英文标题】:WhyshouldyounotuseNumberasaconstructor?[duplicate]为什么不应该使用Number作为构造函数?[复制]【发布时间】:2010-09-2700:30:30【问题描述】:我在JSLint中输入了这条语句:varnumber=ne... 查看详情

为啥 Clang 不允许“和”作为函数名?

】为啥Clang不允许“和”作为函数名?【英文标题】:WhydoesClangnotallow"and"asfunctionname?为什么Clang不允许“和”作为函数名?【发布时间】:2020-02-2010:37:15【问题描述】:我正在使用VisualStudio2017开发一个程序有一段时间了... 查看详情

JSON.stringify 作为 Null 传入 Razor-Page

】JSON.stringify作为Null传入Razor-Page【英文标题】:JSON.stringifyPassingIntoRazor-PageAsNull【发布时间】:2021-06-1404:15:37【问题描述】:我有一个asp.netcorerazor-page,我试图从表中读取数据并将其传递给我的控制器,以便我可以处理表中所做... 查看详情

格式化输出json

参考技术AJSON.stringify()是将JavaScript对象转换为JSON的规范方法。有许多JavaScript框架在内部都使用了JSON.stringify(),比如Express框架的res.json()和Axiosbody序列化。但是,默认情况下,JSON.stringify()输出的JSON格式,不带空格或颜色。在后... 查看详情

当我 JSON.stringify(object) 我得到一个疯狂的字符串作为值

】当我JSON.stringify(object)我得到一个疯狂的字符串作为值【英文标题】:WhenIJSON.stringify(object)Igetacrazystringasavalue【发布时间】:2016-09-0409:32:13【问题描述】:当我将一个包含对象数组的对象从我的快速路由发送到我的客户端时,... 查看详情