【问题标题】:Setting data in correct JSON format using Array and Dictionary使用数组和字典以正确的 JSON 格式设置数据
【发布时间】:2016-08-15 20:42:14
【问题描述】:

下面是我必须为其设置数据的模型。我正在使用数组和字典来实现这一点,这是我尝试过的代码。但它给了我invalid JSON的输出。
我还想问的一件事是为什么log of an array starts and ends with small braces?
任何帮助将非常感激。

代码:

NSDictionary *paramDic = [NSDictionary dictionaryWithObjectsAndKeys:
                       parameterName,@"parameterName",
                       parameterType, @"parameterType",
                       [NSNumber numberWithBool:parameterSorting],@"parameterSorting",[NSNumber numberWithBool:parameterSorting],
                       @"parameterOrdering",
                       nil];

NSMutableArray *paramArray = [NSMutableArray arrayWithObject:paramDic];
NSDictionary *paramData = @{@"rqBody":@{@"catalogName":@"",@"userId":@"", @"parameter":paramArray, @"catalogMode":@""}};

NSData *postData = [NSKeyedArchiver archivedDataWithRootObject:paramData];`

输出:

{"rqBody":{"catalogName":"abcd","userId":"65265hgshg76","parameter":"(
        {
        parameterName = anandShankar;
        parameterOrdering = 1;
        parameterSorting = 1;
        parameterType = Text;
    }
)","catalogMode":"xxxxxx"}}

期望的输出:

{"rqBody":{"catalogName":"abcd","userId":"65265hgshg76","parameter":[{
        "parameterName" : "anandShankar",
        "parameterOrdering" : 1,
        "parameterSorting" : 1,
        "parameterType" : "Text"
    }],"catalogMode":"xxxxxx"}}

【问题讨论】:

  • "parameter":[{ 显示字典数组,所以您可以将字典放入数组并设置为 paramData 字典...
  • 它的 paramDic,我将它作为对象添加到数组中

标签: ios objective-c json nsarray


【解决方案1】:

试试这个代码:

NSDictionary *paramDic = [NSDictionary dictionaryWithObjectsAndKeys:
        @"Object1",@"parameterName",
        @"Object2", @"parameterType",
        @'Object3',@"parameterSorting",@"Object4",
        @"parameterOrdering",
                nil];
NSMutableArray *paramArray = [NSMutableArray arrayWithObject:paramDic];

NSDictionary *paramData = @{@"rqBody":@{@"catalogName":@"",@"userId":@"", @"parameter":paramArray, @"catalogMode":@""}};

添加这行:

NSError * err;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:paramData options:0 error:&err];
NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

NSLog(@"%@", myString); // it will print valid json 

JSON

{  
  "rqBody":{  
     "catalogName":"",
     "parameter":[  
        {  
           "parameterOrdering":"Object4",
           "parameterName":"Object1",
           "parameterType":"Object2",
           "parameterSorting":51
        }
     ],
     "userId":"",
     "catalogMode":""
  }
}

【讨论】:

  • 数组是我的要求,但我仍然尝试过,上面的代码也没有产生有效的 JSON :(
  • 检查我的更新我已经测试过了,它会产生有效的 JSON
  • 检查更新它会创建一个有效的 JSON,里面有一个 NSArray
【解决方案2】:

这并没有错。在控制台或日志中,圆括号 () 表示数组。如果它显示圆括号,那么它是数组。你永远不会在控制台或日志中使用[] 方括号。

更新:

  NSData *data = [NSJSONSerialization dataWithJSONObject:paramData options:kNilOptions error:nil];

然后将此数据发送到服务器。它将在您想要的 json fromat 中

希望这会有所帮助:)

【讨论】:

  • 感谢您的解释。但是我该如何用逗号替换这些 semiColumn,这样我的数据才会是有效的 json?
  • 您想在服务器中发送此数据吗?
  • :是的,请检查所要求的格式。
  • 在回答中检查我的更新。您需要像这样转换数据,您可以使用 nsurlsession 将此数据发送到服务器
  • 不要使用 NSKeyedArchiver,使用nsjsonserialization,正如我在回答中提到的那样。传递您的最终字典并将该数据发送到服务器
猜你喜欢
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多