【问题标题】:How to convert Json String to Java Object?如何将 Json 字符串转换为 Java 对象?
【发布时间】:2016-08-20 09:54:41
【问题描述】:

我有以下字符串格式的 json。如何将其转换为 java 对象?

JSON 排序

String allCameraList =   [{
    "name": "Camera1",
    "displayURL": "Stream-1"
}, {
    "name": "Camera2",
    "displayURL": "Stream-3"
}, {
    "name": "Camera4",
    "displayURL": "Stream-7"
}, {
    "name": "Camera3",
    "displayURL": "Stream-5"
}, {
    "name": "Camera5",
    "displayURL": "Stream-10"
}, {
    "name": "Camera6",
    "displayURL": "Stream-12"
}]

Java 实体类

public class CameraDetails
{
    private String name;
    private String displayURL;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDisplayURL() {
        return displayURL;
    }

    public void setDisplayURL(String displayURL) {
        this.displayURL = displayURL;
    }}

当我尝试使用 Json 解析器时:

 JsonParser parser = new JsonParser();
    String json = parser.parse(allCameraList)
            .getAsJsonObject()
            .getAsJsonObject("name")
            .toString();

它抛出了以下异常:

java.lang.IllegalStateException: Not a JSON Object

请注意,我的 json 字符串以 [ 开头,而不是 {

【问题讨论】:

    标签: java json gson android


    【解决方案1】:

    您可以将 String 转换为 Json 数组。

    ObjectMapper mapper = new ObjectMapper();
    String jsonInString = mapper.writeValueAsString(allCameraList);
    JSONArray json = (JSONArray) parser.parse(jsonInString);
    

    也看看这个。

    import org.codehaus.jackson.map.ObjectMapper;
    
    static ObjectMapper mapper=new ObjectMapper();
    public ObjectMapper  getMapperObject(){
       return mapper;
    }
    
    mapper=TypeConvertion.getMapperObject();
    String jsonString=mapper.writeValueAsString(allCameraList);
    List<CameraDetails> newMSExp=mapper.readValue(jsonString, new TypeReference<List<CameraDetails>>() {});
    return newMSExp;
    

    【讨论】:

      【解决方案2】:

      如果不使用转义字符“/”和双引号,您将无法真正定义字符串。您可以从文件中读取它,将其转换为字符串,如下所示:

      private static String readFile(String path, Charset encoding)
              throws IOException
      {
          byte[] encoded = Files.readAllBytes(Paths.get(path));
          return new String(encoded, encoding);
      }
      

      您可以使用StandardCharsets.UTF_8作为编码方式

      接下来,您可以对获得的字符串进行后处理。对于您的用例,下面的代码应该可以工作。

      private static String postProcess(String string) {
          String result;
          result = string.substring(1,string.length()-1);
          return  "{" + result + "}";
      }
      

      在这些步骤之后,您可以解析为 JSON。

      【讨论】:

        猜你喜欢
        • 2015-05-24
        • 2012-01-22
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 2012-05-05
        相关资源
        最近更新 更多