我正在尝试构建一个应用程序,人们可以从不同的商店订购商品。我对编程很陌生,我认为建立这样的项目是学习它的好方法。
我被困在我的应用程序中,用户可以在我的数据库中搜索公司(公司名称,位置或两者)。数据库返回一个JSON字符串,其中包含所有找到的公司的公司名称和位置,如下所示:
{"companyName":"testcompany_1","companyCity":"Tiel"},
{"companyName":"tectcompany_2","companyCity":"Tiel"}
到目前为止一切顺利!
现在我想将此JSON字符串(NSString
)转换为NSDictionary
,以便在tableView
中显示找到的公司的名称和位置。这就是我被卡住的地方。
我一直在搜索StackOverflow,google等等,我尝试了几种方法来做到这一点,例如:
由于没有看到任何教程/答案真正解决了我的问题,我试图自己制作一些东西,这就是结果:
NSString *strURL = [NSString stringWithFormat:@"http://www.imagine-app.nl/companySearch.php?companyNameSearchField=%@&companyCitySearchField=%@", companyNameSearchField.text, companyCitySearchField.text];
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];
NSArray *companies = [inputString componentsSeparatedByString:@"},{"];
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:companies] options:kNilOptions error:nil];
对我而言,这是有道理的。首先,将NSString
转换为NSArray
以分隔对象,然后将字符串转换为NSDictionary
,tableview
可以使用null
来填充这个。
但是当我记录字典时,它会显示NSDictionary
,因此此代码似乎没有json string
。
经过几周的尝试和搜索,我开始感到非常愚蠢和绝望,因为我找不到一个好方法来做到这一点。
是否有人知道如上图所示将NSDictionary
变为{{1}}?
答案 0 :(得分:2)
您想要做的是以下内容:
NSURL *anURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.imagine-app.nl/companySearch.php?companyNameSearchField=%@&companyCitySearchField=%@", companyNameSearchField.text, companyCitySearchField.text]];
NSData *jsonData = [NSData dataWithContentsOfURL:anURL];
NSArray *mainArray = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:NULL];
// In mainArray are NSDictionaries
for (NSDictionary *informationOnOneCompany in mainArray) {
NSString *name = informationOnOneCompany[@"companyName"];
NSString *city = informationOnOneCompany[@"companyCity"];
// Now you can store these two strings in that array or whatever populates your tableview ;)
}
让我们看看步骤:
NSURL
实例。NSData
对象。NSArray
并使用我们收到的JSON
对其进行初始化。JSON
中的花括号和冒号告诉我们,我们创建的数组是NSDictionary
的实例。NSArray
NSDictionary
中,我们会查看“companyName”和“companyCity”键,并将其值存储在NSString
中。NSArray
datasource
tableView
希望有帮助,如果您有任何疑问,请告诉我;)
答案 1 :(得分:1)
不,在几个地方根本没有意义。例如:
[NSData dataWithContentsOfFile:companies]
嗯,什么? companies
是包含NSArray
的{{1}} - 它不是指向您可以使用初始化数据对象的文件的文件路径。
(看起来你正在假设各个方法的作用 - 为什么呢?最好阅读文档 - 你不会浪费你和我们的时间。)
您在问题中提供的文字/数据也不是有效的JSON。我唯一可以想象的是,Web服务确实返回了有效的JSON,i。即逗号分隔的词典正确地包装在NSString
之间以形成一个数组,你只是忘了包含它们。在这种情况下,你不必强奸字符串和糟糕的Foundation框架,只需将JSON转换为数组就可以了:
[ ]