-1

我正在尝试构建一个应用程序,人们可以在其中从不同的商店订购商品。我对编程完全陌生,我认为构建这样的项目将是学习它的好方法。

我被困在我的应用程序的一部分,用户可以在我的数据库中搜索公司(在公司名称、位置或两者上)。数据库返回一个 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];

对我来说,这是有道理的。首先,将 anNSString转换为 anNSArray以分隔对象,然后将字符串转换为 an NSDictionarytableview我想用 this 填充它。但是当我记录字典时,它说null,所以NSDictionary这段代码似乎没有。

现在经过几个星期的尝试和搜索,我开始感到非常愚蠢和绝望,因为我找不到这样做的好方法。

有谁知道 bow 可以将json string如上所示的 a 变成 aNSDictionary吗?

4

2 回答 2

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 ;)
}

让我们看一下步骤:

  1. 我们用我们想要的链接创建一个NSURL实例。
  2. 我们将该链接的内容下载到一个NSData对象中。
  3. 我们知道我们收到的 JSON 的样子,并确定“顶层”是一个数组。所以我们创建一个并用我们收到的NSArray初始化它。JSON
  4. 您发布的大括号和冒号JSON告诉我们,在我们创建的数组中是NSDictionary.
  5. 我们循环NSArray使用快速枚举
  6. 在每个NSDictionary我们查看键“companyName”和“companyCity”并将它们的值存储在NSString.
  7. 未在上面的代码中实现:您可以填充您的NSArray哪个是datasource您的tableView

希望对您有所帮助,如果您有任何问题,请告诉我;)

于 2013-05-05T10:33:16.853 回答
1

不,在几个地方根本没有意义。例如:

[NSData dataWithContentsOfFile:companies]

啊,什么?companies是一个NSArray包含NSStrings - 它不是指向可以用来初始化数据对象的文件的文件路径。

(看来您正在对各个方法的作用做出假设 - 为什么会这样?最好阅读文档 - 您不会浪费您和我们的时间。)

您在问题中提供的文本/数据也不是有效的 JSON。我唯一能想象的是,Web 服务确实返回了有效的 JSON,即逗号分隔的字典被正确地包裹起来[ ]形成一个数组,你只是忘了包括它们。在这种情况下,您不必强奸字符串和糟糕的 Foundation 框架,只需将 JSON 转换为数组就可以了:

NSURL *url = [NSURL URLWithString:@"http://example.com/foo.json"];
NSData *data = [NSData dataWithContentsofURL:url];
NSArray *response = [NSJSONSerialization jsonObjectWithData:data options:kNilOptions error:NULL];
于 2013-05-05T09:19:19.957 回答