如何在不获取空对象的情况下进行 JSON.stringify 和 JSON.parse?

     2023-03-05     143

关键词:

【中文标题】如何在不获取空对象的情况下进行 JSON.stringify 和 JSON.parse?【英文标题】:How to JSON.stringify and JSON.parse without getting an empty object? 【发布时间】:2013-05-05 18:35:53 【问题描述】:

我问这个问题的原因是因为我想为我的对象使用 LocalStorage。您可能知道,在使用 LocalStorage 时,您必须对对象进行 JSON.stringify 处理,然后将它们解析回 javascript 对象。

我正在尝试使用方法对对象进行 JSON.stringify,然后将其解析回来,但我得到的只是一个空对象。

请看一下这段代码。

Person.js

function Person(name, telePhone) 

this.getName = function () 
    return name;


this.setName = function (_name) 
    name = _name;


this.getTelePhone = function () 
    return telePhone;


this.setTelePhone = function (_telePhone) 
    telepPhone = _telePhone;

;

Javascript.js

window.onload = function () 

var name = "John";
var telePhone = "073-2335662";

var personObject = new Person(name, telePhone);

console.log(personObject);
// returns: Person 
console.log(personObject.getName());
//returns: John

var test = JSON.stringify(personObject);
var newPersonObject = JSON.parse(test);

console.log(newPersonObject);
//returns: Object
console.log(newPersonObject.getName());
//returns: Uncaught TypeError: Object #<Object> has no method 'getName'
;

有什么建议为什么 JSON.stringify 和 JSON.parse 之后的这个 Person 对象是空的并且丢失了它的所有方法?

【问题讨论】:

【参考方案1】:

函数不是有效的 JSON 数据类型。当然,函数持有的变量范围是不能序列化的。

您需要将数据直接存储在对象上以对其进行序列化。

JSON 有 "object" (key/value pair) 和 "array" (ordered list) 风格的结构,还有string, number, truefalsenull

http://json.org/

【讨论】:

非常感谢。我猜 Person.js 文件看起来应该与常规对象属性不同? @Axel:是的,如果你最终想要序列化数据,数据需要直接在对象上,并且需要是 JSON 支持的有限数据子集的一部分。【参考方案2】:

JSON.stringify 不会序列化函数,因为它们不是数据。 JSON 仅存储真实数据及其结构——特别是变量。 如果您还想存储函数,可以使用.toString() 方法将函数源代码转换为字符串,并将其转换回函数,您可以使用 eval() 重新创建方法,但这是一个单独的问题.

您可能必须编写自己的序列化程序来执行此类任务,这个想法非常有趣,如果有现成的解决方案,我不会感到惊讶。

【讨论】:

如何在不使用 OPENJSON 的情况下获取 json 对象属性

】如何在不使用OPENJSON的情况下获取json对象属性【英文标题】:HowtogetjsonobjectpropertywithoutusingOPENJSON【发布时间】:2019-10-1512:04:26【问题描述】:以下是我从中获取特定值(OldPTValue,NewPTValue)的脚本表HistoryTracking.我正在使用OPENJ... 查看详情

如何在不丢失记录的情况下使用空列表对熊猫中的列进行 json_normalize

】如何在不丢失记录的情况下使用空列表对熊猫中的列进行json_normalize【英文标题】:Howtojson_normalizeacolumninpandaswithemptylists,withoutlosingrecords【发布时间】:2020-12-2723:43:56【问题描述】:我正在使用pd.json_normalize将此数据中的"se... 查看详情

如何在不更改获取的对象的情况下触发 NSFetchedResultsController 中的重新加载?

】如何在不更改获取的对象的情况下触发NSFetchedResultsController中的重新加载?【英文标题】:HowdoItriggerareloadinanNSFetchedResultsControllerwithoutchangingthefetchedobject?【发布时间】:2010-08-1012:17:21【问题描述】:在我的iPhone应用程序中,我... 查看详情

重构 PHP OOP - 如何在不传递参数的情况下获取对象?

】重构PHPOOP-如何在不传递参数的情况下获取对象?【英文标题】:RefactoringPHPOOP-Howtogettheobjectwithoutpassingaparameter?【发布时间】:2011-02-1511:19:36【问题描述】:我需要重构这段代码,在使用“save()”方法时不使用参数。代码是:Pe... 查看详情

java示例代码_反射:如何在不知道对象的类的情况下从对象中获取字段值

java示例代码_反射:如何在不知道对象的类的情况下从对象中获取字段值 查看详情

如何在不返回 Promise 的情况下从对象的`get()` 获取异步数据

】如何在不返回Promise的情况下从对象的`get()`获取异步数据【英文标题】:Howtogetasynchronousdatafromanobject\'s`get()`withoutreturningaPromise【发布时间】:2019-07-1918:16:25【问题描述】:在NodeJS中,我有一个类似的对象,varscope=word:"init&qu... 查看详情

如何在不污染全局命名空间的情况下公开 javascript 对象以进行单元测试

】如何在不污染全局命名空间的情况下公开javascript对象以进行单元测试【英文标题】:Howtoexposejavascriptobjectsforunittestingwithoutpollutingtheglobalnamespace【发布时间】:2012-01-2401:46:48【问题描述】:我有一个javascript自动完成插件,它使... 查看详情

如何在不指定键值的情况下获取 JSON 对象的最后一个元素?

】如何在不指定键值的情况下获取JSON对象的最后一个元素?【英文标题】:HowcanIgetlastelementofJSONObjectwithoutspecifyingkeyvalue?【发布时间】:2021-11-1307:39:48【问题描述】:这是来自该API的covid19的数据:https://data.covid19india.org/v4/min/time... 查看详情

如何在不使用强类型的情况下获取富文本中的组件对象 [Kontent Delivery SDK .NET]

】如何在不使用强类型的情况下获取富文本中的组件对象[KontentDeliverySDK.NET]【英文标题】:Howtogetcomponentobjectinrichtextwithoutusingstrongtype[KontentDeliverySDK.NET]【发布时间】:2020-03-1516:50:53【问题描述】:作为标题,我找不到如何在不... 查看详情

如何在不进行硬编码的情况下在 C++ 中获取类数组的长度?

】如何在不进行硬编码的情况下在C++中获取类数组的长度?【英文标题】:HowtogetthelengthofaclassarrayinC++,withouthardcoding?【发布时间】:2020-01-0118:50:33【问题描述】:我在C++中有一个类数组。我是这样定义的:Student*pliststudent=newStuden... 查看详情

如何在不获取 xmlns="..." 的情况下将对象序列化为 XML?

】如何在不获取xmlns="..."的情况下将对象序列化为XML?【英文标题】:HowtoserializeanobjecttoXMLwithoutgettingxmlns="..."?【发布时间】:2010-09-2012:18:24【问题描述】:有没有办法让我在.NET中序列化一个对象,而无需XML命名... 查看详情

如何在不为每个帖子调用评论对象的情况下从墙上的帖子中获取评论计数?

】如何在不为每个帖子调用评论对象的情况下从墙上的帖子中获取评论计数?【英文标题】:Howtogetcommentcountfromyourwallpostswithoutmakingacalltocommentsobjectforeachpost?【发布时间】:2013-05-2819:36:15【问题描述】:7月10日重大变化引入;从\... 查看详情

如何在不出现引用错误的情况下将不存在的 JavaScript 对象与未定义的对象进行比较?

】如何在不出现引用错误的情况下将不存在的JavaScript对象与未定义的对象进行比较?【英文标题】:HowcanIcompareanon-existingJavaScriptobjecttoundefinedwithoutgettingaReferenceError?【发布时间】:2012-07-0723:30:51【问题描述】:我想从这个表达... 查看详情

如何在不创建新对象的情况下测试私有成员对象

】如何在不创建新对象的情况下测试私有成员对象【英文标题】:Howtotestprivatememberobjectswithoutmakinganewobject【发布时间】:2019-08-1217:21:01【问题描述】:我正在尝试针对一个类编写单元测试。我无法更改课程,但我认为可以使用... 查看详情

如何在不阻塞的情况下从 Flux 获取列表?

】如何在不阻塞的情况下从Flux获取列表?【英文标题】:HowtogetaListfromFluxwithoutblocking?【发布时间】:2019-09-0923:52:35【问题描述】:我有一个返回通量的存储库,并希望将结果设置为另一个需要列表的对象。有没有其他方法可以... 查看详情

如何在不获取“SomeType@2f92e0f4”的情况下打印我的 Java 对象?

】如何在不获取“SomeType@2f92e0f4”的情况下打印我的Java对象?【英文标题】:HowdoIprintmyJavaobjectwithoutgetting"SomeType@2f92e0f4"?【发布时间】:2015-03-1908:59:18【问题描述】:我有一个类定义如下:publicclassPersonprivateStringname;//cons... 查看详情

如何在不加载空页面的情况下清理 UIWebView 的内容?

】如何在不加载空页面的情况下清理UIWebView的内容?【英文标题】:HowtocleanthecontentofUIWebViewwithoutloadinganemptypage?【发布时间】:2012-06-0606:43:25【问题描述】:我需要清理UIWebView的内容(为了重用它),但是我在它的委托方法中有... 查看详情

如何让 GraphQL 在不进行轮询的情况下从数据库中获取实时/新数据?

】如何让GraphQL在不进行轮询的情况下从数据库中获取实时/新数据?【英文标题】:HowdoIgetGraphQLtogetlive/newdatafromdatabasewithoutpolling?【发布时间】:2021-07-1902:27:44【问题描述】:我有一个运行GraphQL、MongoDB+Mongoose和Apollo的后端。此... 查看详情