将对象序列化为 JSON

     2023-03-16     209

关键词:

【中文标题】将对象序列化为 JSON【英文标题】:Serializing an object to JSON 【发布时间】:2013-01-14 19:46:50 【问题描述】:

我是 JSON 格式的新手,但它看起来非常适合我正在尝试的内容。我需要使用自定义 NSObject(食谱)并通过电子邮件中的 URL 字符串发送。然后收件人将在我的应用程序中打开链接并解析 URL。

我现有的实现从配方的详细信息手动构建一个字符串,并在另一端对其进行解码。我更喜欢使用更标准的东西,比如 JSON。

到目前为止,我已将以下方法添加到我的 Recipe 类中:

- (NSData *)jsonRepresentation

    NSDictionary *dictionary = @@"name":self.name,
                         @"instructions":self.instructions;
    NSError* error;
    return [NSJSONSerialization dataWithJSONObject:dictionary
                                           options:NSJSONWritingPrettyPrinted
                                             error:&error];

我可以使用以下方法成功记录 NSData 对象:

 [[NSString alloc]initWithData:recipe.jsonRepresentation
                      encoding:NSUTF8StringEncoding];

但是,我还不能添加我的成分列表(NSArray)。我试图简单地使用它:

NSDictionary *dictionary = @ @"name" : self.name,
                      @"instructions" : self.instructions,
                       @"ingredients" : self.orderedIngredients ;

但在登录时,我收到此错误:

Invalid type in JSON write (Ingredient)

如你所知,我在这方面还很陌生。

在将ingredients 数组添加到字典之前,我是否打算对它做一些事情?

【问题讨论】:

注意:我没有使用任何第三方框架,并且暂时不想使用,直到我知道自己在做什么。 什么是成分对象?在添加到当前字典之前,您应该在该类中编写一个方法以返回一个 NSDictionary 左右。 成分是具有一些属性的自定义对象。我在这里唯一关心的是名字。 如果名字就是你想要的,请检查我的答案。 【参考方案1】:

试试这个:

NSDictionary *dictionary = @ @"name" : self.name,
                      @"instructions" : self.instructions,
                       @"ingredients" : [self.orderedIngredients valueForKey:@"name"] ;

假设self.orderedIngredients 是一个包含ingredients 对象的数组,并且ingredients 有一个名为name 的属性,

[self.orderedIngredients valueForKey:@"name"]

将返回一个包含所有名称的数组。

【讨论】:

谢谢。非常简洁。我只希望 XCode 可以让它看起来一样漂亮。【参考方案2】:

如果您的成分列表包含自定义类对象,您应该为该类创建一个序列化程序。

【讨论】:

好的 - 我不清楚我会怎么做,但我看到了区别。我可以改用一组成分名称吗? @user1111278,+1。如果我们必须将 ingredients 的所有属性转换为 JSON,我同意 serializer 部分。

将对象序列化为 JSON

】将对象序列化为JSON【英文标题】:SerializinganobjecttoJSON【发布时间】:2010-10-0804:40:50【问题描述】:如何在JavaScript中?【问题讨论】:【参考方案1】:您正在寻找JSON.stringify()。【讨论】:将JSON.stringify()与包含数组的javascript... 查看详情

将 JSON 反序列化为对象

】将JSON反序列化为对象【英文标题】:DeserializingJSONintoanobject【发布时间】:2016-03-1707:26:47【问题描述】:我有一些JSON:"foo":["bar":"baz","bar":"qux"]我想将其反序列化为一个集合。我已经定义了这个类:publicclassFoopublicstringbarget;set;... 查看详情

将 JSON 反序列化为对象

】将JSON反序列化为对象【英文标题】:DeserializingJSONintoanobject【发布时间】:2021-12-1621:52:42【问题描述】:我有一些JSON:"foo":["bar":"baz","bar":"qux"]我想将其反序列化为一个集合。我已经定义了这个类:publicclassFoopublicstringbarget;set;... 查看详情

如何将属性序列化为 json 对象?

】如何将属性序列化为json对象?【英文标题】:HowcanIserializepropertiesasjsonobject?【发布时间】:2019-03-2108:44:49【问题描述】:如何使用jackson序列化以下通用响应?publicclassGenericResponseprivateStringresource;privateIntegerstatus;privateErrorInfores... 查看详情

将实体框架对象序列化为 JSON

】将实体框架对象序列化为JSON【英文标题】:SerializingEntityFrameworkObjectsintoJSON【发布时间】:2011-12-0902:32:27【问题描述】:publicclassGenericHandler:IHttpHandlerpublicclassASSystempublicstringSIDget;set;publicstringDescriptionget;set;publicstringS 查看详情

将表单序列化为json对象

$.fn.serializeJson=function(){  varserializeObj={};  vararray=this.serializeArray();  varstr=this.serialize();  $(array).each(function(){    if(serializeObj[this.name]){      if($.isArray(serializeObj 查看详情

将 PHP 对象序列化为 JSON

】将PHP对象序列化为JSON【英文标题】:SerializingPHPobjecttoJSON【发布时间】:2011-10-1318:37:07【问题描述】:所以当我偶然发现新的JsonSerializableInterface时,我在php.net中寻找有关将PHP对象序列化为JSON的信息。不过它只是PHP>=5.4,而... 查看详情

如何将表行序列化为 json 对象

】如何将表行序列化为json对象【英文标题】:Howtoserializetablerowtojsonobject【发布时间】:2017-03-0713:41:34【问题描述】:如何将表格序列化为json数组,使每个数组元素都包含代表一个表格行的json对象:[name:"variable1",valuetostore:"a-b",t... 查看详情

使用 Json.net 将 JSON 对象反序列化为动态对象

】使用Json.net将JSON对象反序列化为动态对象【英文标题】:DeserializeJSONobjectintodynamicobjectusingJson.net【发布时间】:2011-05-3023:13:12【问题描述】:是否可以使用json.net从json反序列化返回动态对象?我想做这样的事情:dynamicjsonRespons... 查看详情

将 PHP 对象图序列化/反序列化为 JSON

】将PHP对象图序列化/反序列化为JSON【英文标题】:Serialize/unserializePHPobject-graphtoJSON【发布时间】:2012-05-1610:06:15【问题描述】:我想将完整的PHP对象图序列化为JSON字符串表示,然后将其反序列化回相同的PHP对象图。以下是我考... 查看详情

JSON:将 DataRow 序列化为父对象

】JSON:将DataRow序列化为父对象【英文标题】:JSON:SerializingDataRowintoparentobject【发布时间】:2020-06-0315:25:37【问题描述】:我有一个树形结构,由DataTable中的行创建,每个DataRow生成一个节点。每个节点当然应该包含子节点,还要... 查看详情

将 JSON 反序列化为现有对象 (Java)

】将JSON反序列化为现有对象(Java)【英文标题】:DeserializeJSONintoexistingobject(Java)【发布时间】:2012-09-1304:09:20【问题描述】:我想知道如何让JacksonJSON库将JSON反序列化为现有对象?我试图找到如何做到这一点;但它似乎只能接受... 查看详情

将 JSON 命名属性反序列化为 .Net 对象

】将JSON命名属性反序列化为.Net对象【英文标题】:DeserializeJSONnamedpropertyto.NetObject【发布时间】:2012-03-0109:56:21【问题描述】:我使用的API提供了JSON负载。响应的一部分有一个包含命名对象数组的属性。我想我想将这部分反序... 查看详情

将 ES6 类对象序列化为 JSON

】将ES6类对象序列化为JSON【英文标题】:SerializinganES6classobjectasJSON【发布时间】:2017-03-0505:41:52【问题描述】:classMyClassconstructor()this.foo=3varmyClass=newMyClass()我想将myClass对象序列化为json。我能想到的一种简单方法是,因为每个... 查看详情

PRAW:将评论和提交对象序列化为 JSON

】PRAW:将评论和提交对象序列化为JSON【英文标题】:PRAW:serializingCommentandSubmissionobjectsasJSON【发布时间】:2014-09-0502:15:03【问题描述】:我目前正在开发一个使用praw进行数据挖掘的reddit爬虫。我想从subreddits爬取cmets和提交,然... 查看详情

将对象列表序列化为没有父对象名称的 JSON

】将对象列表序列化为没有父对象名称的JSON【英文标题】:SerializeobjectslisttoJSonwithoutParentobjectname【发布时间】:2019-03-0106:52:19【问题描述】:我有对象列表并在我的MVC应用程序中使用下面的代码输出它们。publicJsonResultConversionIn... 查看详情

如何使用 Json.NET 将 XML 序列化为 JSON 对象

】如何使用Json.NET将XML序列化为JSON对象【英文标题】:HowtoSerializeXMLtoaJSONobjectwithJson.NET【发布时间】:2011-10-1506:11:59【问题描述】:我可以像这样将XML序列化为JSON字符串:varxml=newXmlDocument();xml.LoadXml("<person><name>John</na... 查看详情

将 Objective-C 对象序列化和反序列化为 JSON

】将Objective-C对象序列化和反序列化为JSON【英文标题】:SerializeandDeserializeObjective-CobjectsintoJSON【发布时间】:2011-08-2407:37:27【问题描述】:我需要将objective-c对象序列化和反序列化为JSON以存储在CouchDB中。人们是否有任何示例代... 查看详情