【问题标题】:Not able to get name/value pairs from JSON object, when using variable使用变量时无法从 JSON 对象获取名称/值对
【发布时间】:2012-10-29 07:17:10
【问题描述】:

在使用变量时无法从 JSON 对象获取名称/值对,但在对名称进行硬编码时能够读取它。

为了更好地解释:

1) 我的 JSON 对象是这样的 - {..... {“费率”:{“name1”:value1,“name2”:value2 ...等} ...}

2) 我可以在我的 android 应用程序中读取此对象。

3) 现在这个速率对象名称值对,我正在尝试根据用户输入来读取 -

          String s1 = '"'+name1+'"';  // here name1 i got from user input, & converted into string

4) 现在,当我尝试从 rates 对象中获取值时,我得到了 null 异常 -

            JSONObject rateObject = jObject.getJSONObject("rates");  //able to get  
                                                                    complete object

            String rate1 = (String) rateObject.get(s1); // giving NULL exception

5) 但是如果我使用硬编码字符串,它可以工作 -

            String rate1 = (String) rateObject.get("name1"); // working

任何指针为什么它在使用变量时不起作用。

谢谢


感谢您的建议,我解决了这个问题。我犯了两个错误 - 1)使用其他人正确指出的引号和 2)将双精度值转换为字符串。纠正两者都解决了我的问题:)

【问题讨论】:

  • 显示将 name1 分配给用户输入值的代码。
  • 无论name1 的值是什么,s1 都是一个字符串,其内容 以双引号字符开头和结尾。在您的 JSON 输入中没有以该名称作为名称的字段 - 如果有,则必须将其编码为 ..., "\"name1\"": value1, ...

标签: android json


【解决方案1】:

就您的最终代码 sn-p 而言,您实际上在做

String rate1 = (String) rateObject.get("\"name1\""); //note the extra quotes

因为您已经用双引号字符预订了用户输入字符串。您只希望输入字符串本身没有书尾。 JSON 符号中的引号用于描述每个键名;引号不是键名本身的一部分。

创建s1时需要省略引号:

String s1 = name1;

或者,如果name1 已经不是字符串:

String s1 = name1.toString();

【讨论】:

  • 实际上我最初只是通过不使用引号来尝试这种方式,但我得到了 NULL 异常,因此我想在字符串中添加引号,以使其工作。但无济于事:(
  • 谢谢我解决了这个问题。我犯了两个错误 - 1)使用其他人正确指出的引号和 2)将双精度值转换为字符串。纠正两者都解决了我的问题:)
【解决方案2】:

替换:

String s1 = '"'+name1+'"';

与:

String s1 = name1;

【讨论】:

  • 实际上,我最初只是通过不使用引号来尝试这种方式,但我得到了 NULL 异常,因此我想将引号添加到字符串中,以使其正常工作。但无济于事:(
  • 听起来您没有将 name1 分配给任何东西。在您的代码中的某个时刻,需要将 name1 分配给内容为“name1”的字符串。
猜你喜欢
  • 1970-01-01
  • 2013-06-01
  • 2015-08-14
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
相关资源
最近更新 更多