【问题标题】:parse a string object to a JSONObject将字符串对象解析为 JSONObject
【发布时间】:2020-09-16 15:08:07
【问题描述】:

我需要将包含 JSON 文件数据的字符串解析为 JSONObject 并遍历其内容以获取其键和值以供以后进一步处理。在将文件转换为字符串后,我一直在解析文件的内容。我尝试使用 parse() , quote() 但似乎我错过了一个细节并且我犯了一个重大错误。

这是我处理的 json 文件的 sn-p:

{
    {
    "id":0,
    "name": "project1",
    "couverage": "100",
    "completness": "44.8",
    "consistency": "46",
    }
    
    {
    "id":1,
    "name": "project2",
    "couverage": "100",
    "completness": "44.8",
    "consistency": "46",
    }
    
    {
    "id":2,
    "name": "project3",
    "couverage": "100",
    "completness": "44.8",
    "consistency": "46",
    }
}

这是我开发的代码

public void readfromJsonFile(File jsonFile, long readTimeStamp) {
    logger.info("Read from JSON file:  {}", jsonFile.getName());
    
    try{
            
        //Read File Content
        String content = new String(Files.readAllBytes(jsonFile.toPath()));
        
        JSONParser jsonParser = new JSONParser(content);
        JSONObject obj = (JSONObject) jsonParser.parse();
        JSONArray key = obj.names();
        
        for (int i = 0; i < key.length (); ++i) {
            String keys = key.getString(i);
            System.out.println(keys);
            String value = obj.getString (keys);
            System.out.println(value);
    }catch (Exception e) {
            logger.error("Failed to parse JSON File: {}", jsonFile.getName());
        }
}

【问题讨论】:

  • 你的问题是在获取key和value的时候?
  • 是的,我无法读取我的内容字符串(或 Json 文件)
  • 我可以举一个杰克逊的例子吗?你会感激吗?
  • @AnishB。是的,如果它可以帮助我,为什么不呢?我将不胜感激
  • 这个 json 是否正确,我没有看到方括号描述它是一个数组或列表。我没有在每个内部 json 部分之间看到逗号来分隔元素。甚至连贯性都以逗号结尾,这也是错误的。这甚至不能称为 json :)

标签: java json spring-boot


【解决方案1】:

您也可以使用 Jackson Databind。

创建一个 POJO 类。例如:

public class POJO {

   private int id;
   private String name;
   private String couverage;
   private String completness;
   private String consistency;

   // getters, setters and constructors

}

修改文件中的 JSON。

[
    {
    "id":0,
    "name": "project1",
    "couverage": "100",
    "completness": "44.8",
    "consistency": "46"
    },
    {
    "id":1,
    "name": "project2",
    "couverage": "100",
    "completness": "44.8",
    "consistency": "46"
    },
    {
    "id":2,
    "name": "project3",
    "couverage": "100",
    "completness": "44.8",
    "consistency": "46"
    }
]

代码:

public void readfromJsonFile(File jsonFile, long readTimeStamp) {
    logger.info("Read from JSON file:  {}", jsonFile.getName());
    try {
        ObjectMapper objectMapper = new ObjectMapper();
        POJO[] pojos = objectMapper.readValue(jsonFile, POJO[].class);
        for (int i = 0; i < pojos.length; ++i) {
            System.out.println(pojos[i].getId());
        }
    } catch (Exception e) {
            logger.error("Failed to parse JSON File: {}", jsonFile.getName());
    }
}

【讨论】:

  • @NabilZouita 这有用吗?
  • 我有一个模型可以读取这些值(一致性、覆盖率等)我可以使用该模型还是必须创建一个具有 Json 文件属性的类?
  • 我花了一些时间进行测试,但这很有帮助,谢谢
【解决方案2】:

这样试试

JSONArray array_= new JSONArray(content);
JSONObject obj = (JSONObject) array_.get(0);// or any index

然后你就可以使用对象了。

【讨论】:

  • 不幸的是还是同样的问题!
猜你喜欢
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 2014-01-17
  • 2013-04-04
  • 2019-07-12
  • 1970-01-01
相关资源
最近更新 更多