【问题标题】:JSON string to Object[]JSON 字符串到 Object[]
【发布时间】:2018-08-24 08:40:21
【问题描述】:

我需要将 JSON 字符串转换为 Object[]。

我尝试使用 link1link2 并没有帮助我。

我如何获取 JSON 字符串的代码:

public static String getListJsonString() {
    String getListsUrl = BASE_URL + "lists";
    String result = "";
    try {
        URL url = new URL(getListsUrl);
        URLConnection urlConnection = url.openConnection();
        urlConnection.setRequestProperty("Authorization", "Basic " + getAuthStringEnc());
        InputStream is = urlConnection.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);

        int numCharsRead;
        char[] charArray = new char[1024];
        StringBuffer sb = new StringBuffer();
        while ((numCharsRead = isr.read(charArray)) > 0) {
            sb.append(charArray, 0, numCharsRead);
        }
        result = sb.toString();
        System.out.println(result);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return result;
}

这是我的 JSON 示例:

之后我必须以这种方式填充 ChomboBox(这是示例):

Object[] lists = getLists();
for(Object list : lists){
    System.out.println("fill combobox");
}

【问题讨论】:

  • 您尝试了哪些,哪些没有奏效?
  • 您需要提供您正在转换的 JSON 字符串,并显示您尝试过的内容以及失败的原因。
  • Object[] obj = new Object[] { str }; 如果这不是您要查找的内容,请说明您的期望。
  • did not help me 是什么意思你收到错误了吗?如果有,请提供。输出不是想要的吗?如果是这样,请提供您得到的输出并指定它有什么问题。产生问题的代码是什么?你确定 JSON 是有效的吗?

标签: java json


【解决方案1】:

可以使用 Gson、TypeToken 和 JSONObject,例如:

final static Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
final Type objectType = new TypeToken<Object>(){}.getType();

JSONObject obj = new JSONObject(result);

Vector<Object> lists = gson.fromJson(obj.toString(), objectType); 

【讨论】:

    【解决方案2】:

    我建议你应该使用jackson lib。我链接了一个很棒的快速教程,我觉得它非常清晰和有用。

    jackson lib 背后的想法是 JSON 格式是一种字符串化的对象格式,因此您应该能够轻松地将其正确映射到 java POJO。 (POJO = 普通的旧 java 对象,它是一个带有一些字段的对象,可能在您的字段顶部有一些注释,最后只是 getter 和 setter)。

    您可以使用此链接从 json 字符串自动生成带有 Jackson 注释的 POJO 类:http://www.jsonschema2pojo.org/(只需选择“JSON”而不是“JSON SCHEMA”,并且可以根据需要调整其他参数)。

    【讨论】:

      【解决方案3】:

      我能感觉到你的痛苦,有时很难让一个快速的例子启动并运行。

      这是一个非常简单的示例,您可以使用 Jackson 库读取 json 文档。类路径中至少需要 jackson-annotations-x.y.z.jarjackson-core-x.y.z.jarjackson-databind-x.y.z.jar 文件。

      https://github.com/FasterXML/jackson-databind/

      import com.fasterxml.jackson.databind.ObjectMapper;
      import com.fasterxml.jackson.databind.JsonNode;
      
      public class TestJSON1 {
      
          public static void main(String[] args) throws Exception {
              ObjectMapper mapper = new ObjectMapper();
              JsonNode jsonObj;
      
              String jsonStr = "{ \"list\": [ "
                  + " {\"id\":\"1\", \"name\":\"test1\"}, "
                  + " {\"id\":\"2\", \"name\":\"test2\"}, "
                  + " {\"id\":\"3\", \"name\":\"test3\"} "
                  + "]}";
      
              jsonObj = mapper.readTree(jsonStr);
              System.out.println(jsonObj.get("list"));
      
              JsonNode jsonArr=jsonObj.get("list");
              int count=jsonArr.size();
              for (int idx=0; idx<count; idx++) {
                  jsonObj = jsonArr.get(idx);
                  System.out.println( jsonObj.get("id").asText()+"="+jsonObj.get("name").asText() );
              }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-06
        • 2013-12-24
        • 1970-01-01
        • 2021-06-01
        • 2010-11-25
        • 1970-01-01
        • 2015-05-03
        • 2017-09-16
        相关资源
        最近更新 更多