【问题标题】:Convert JSON String to Arraylist for Spinner将 JSON 字符串转换为 Spinner 的 Arraylist
【发布时间】:2017-11-03 07:17:38
【问题描述】:

我从我的服务器获得了包含以下值的 JSON 字符串:

{"server_response":[{"violation":"Driving with No Helmet"},{"violation":"Try"}]}

我要做的是将此 JSON 字符串转换为字符串数组或 Arraylist 使用 Driving with no Helmet 和 Try 的值并将其用作 Autocomplete Textview 上的选项。但我似乎无法正确转换它们。关于我应该做什么的任何帮助或提示?目前我正在从另一个活动中获取 JSON 字符串并将其传递给应该使用它的活动:

String json_string2 = getIntent().getExtras().getString("json_data");

任何人都有时间我愿意学习。 :) 谢谢

PS:设法让它工作。 @Suhafer 的回答很完美。感谢大家的热情帮助! :)

【问题讨论】:

  • 只有列表形式
  • 那么是否有可能获取值不戴头盔驾驶并尝试并将其附加到自动完成文本视图?
  • stackoverflow.com/a/18998203/6225257 这篇文章解释了如何在 Java 中解析 json。
  • 您需要解析方面的帮助,还是需要自动完成文本视图方面的帮助,或者两者都需要?
  • 您的具体要求是什么

标签: java android json arraylist


【解决方案1】:

我认为首先,您需要解析 json 以获得您想要的字符串列表:

String json_string2 = getIntent().getExtras().getString("json_data");
List<String> lStringList = new ArrayList<>();
try {
      JSONObject lJSONObject = new JSONObject(json_string2);
      JSONArray lJSONArray = lJSONObject.getJSONArray("server_response");
      for (int i = 0; i < lJSONArray.length(); i++)
      {
        lStringList.add(
           lJSONArray.getJSONObject(i).getString("violation"));
      }
}
catch(Exception e)
{
    e.printStackTrace();
}

然后,您需要将该列表设置为您的适配器:

ArrayAdapter<String> yourListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lStringList);

接下来,为您的 AutoCompleteTextView 实现适配器。

lAutoCompleteTextView.setAdapter(lStringArrayAdapter);

希望对你有帮助。

【讨论】:

  • 到目前为止,这是我第一次尝试的,效果很好!可悲的是,我不能赞成您的回答,但这是一个非常大的帮助。谢谢! :)
  • 我会为 Suhafer 投票,但 Ekko Sky,我建议您也尝试使用 Gson 进行解析。图书馆很棒,会花很短的时间来学习和使用。随着您的响应增加,很难使用默认的 JSONObject 或 JSONArray 来满足它,在我看来,Gson 是最好的方法。快乐编码!欢呼
【解决方案2】:

阅读您的评论我认为您希望此列表填充在 AutoCompleteTextView 上。如果您仔细按照这些步骤操作,我已经彻底写了该怎么做这肯定会有所帮助。 首先获取响应并将其转换为List&lt;String&gt; list = new ArrayList&lt;&gt;() 格式,通过

创建此列表的ArrayAdapter
yourListAdapter = new ArrayAdapter<String>(YourActivity.this, 
android.R.layout.simple_list_item_1, list);

在此之后设置您的yourAutoCompleteTextBoxName.setAdapter(yourListAdapter); 在你的活动中初始化这个:

yourAutoCompleteTextBoxName.setOnEditorActionList(...){...}

如果您希望从 AutoComplete TextView 中单击您的列表,请执行以下操作:

yourAutoCompleteTextBoxName.setOnItemClickListener(...){...}

【讨论】:

    【解决方案3】:

    您可以使用 jettinson.jar 执行以下操作

     try {
            String data = "{\"server_response\":[{\"violation\":\"Driving with No Helmet\"},{\"violation\":\"Try\"}]}";
            JSONObject jsonObject = new JSONObject(data);
            JSONArray temp = jsonObject.getJSONArray("server_response");
            int length = temp.length();
            if (length > 0) {
                String[] recipients = new String[length];
                for (int i = 0; i < length; i++) {
                    JSONObject nObject = new JSONObject(temp.getString(i));
                    recipients[i] = nObject.getString("violation");
                }
            }
        } catch (JSONException ex) {
            Logger.getLogger(JavaApplication2.class.getName()).log(Level.SEVERE, null, ex);
        }
    

    【讨论】:

      【解决方案4】:

      获取您的字符串列表:

      您可以使用Jackson's ObjectMapper 类。

      public class Data {
      
      String violation;
      ...
      }
      
      List<Data> violations = objectMapper.readValue(json, new TypeReference<List<Data>>(){});
      

      【讨论】:

        【解决方案5】:

        以下:“数组”将具有所有违规行为。 (您将需要一些 try / catch 来包围)。祝你有美好的一天!

        JSONObject json = new JSONObject(json_string2);
        
        JSONArray violations = json.getJSONArray("server_response");
        
        String[] array = new String[violations.length()];
        
        for(int i = 0; i < violations.length(); i++) {
            JSONObject violation = new JSONObject(violations.getString(i));
            array[i] = violation.getString("violation");
        }
        

        【讨论】:

          【解决方案6】:

          你可以使用Gson库https://github.com/google/gson

          从 JSON 或 JSON-Schema http://www.jsonschema2pojo.org/ 生成普通的旧 Java 对象

          YourJsonData jsonObject;
          String json_string2 = getIntent().getExtras().getString("json_data");
          Gson gson = new Gson();
          jsonObject = gson.fromJson(json_string2, YourJsonData.class);
          

          从 jsonObject 你可以得到你的列表,即 server_response 数组列表。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-26
            • 1970-01-01
            • 2019-09-04
            • 2016-06-28
            • 2012-04-28
            • 2011-09-13
            • 2018-10-26
            • 1970-01-01
            相关资源
            最近更新 更多