遍历 .json 文件并打印 JAVA 中的所有值 [重复]

Posted

技术标签:

【中文标题】遍历 .json 文件并打印 JAVA 中的所有值 [重复]【英文标题】:iterate over .json file and print all values in JAVA [duplicate] 【发布时间】:2020-09-26 10:23:30 【问题描述】:

这是一个包含许多产品价格的prices.json文件 我需要遍历这个 .json 以便与另一个系统的另一个 json 输出进行比较

我只需要获取字段 包含产品 ID 的“MATNR”字段 和 "NET_PRICE" = 包含增值税前的价格 和 "PRICE_INC_TAX" = 包含增值税后的价格

  [
    
        "customer": 
            "AUART": "",
            "KALSM": "ZDPS00",
            "KUNNR": "0001234567",
            "SPRAS": "",
            "VKGRP": "",
            "VKORG": "1000",
            "VTWEG": "10",
        "ZMDD": "99",
        "ZTERM": ""
    ,
    "outdated": false,
    "outputs": [
        
            "KUNNR": "0001234567",
            "KWMENG": "1",
            "MATNR": "000000000001000001",
            "NET_PRICE": "15.50",
            "NET_PRICE_PER_BASE_UNIT": "15.50",
            "ORDER": "1",
            "PRICE_INC_TAX": "18.13",
            "PRICE_INC_TAX_PER_BASE_UNIT": "18.13",
            "TOTAL_TIME": "Total Calculation Time: 15ms",
            "VRKME": "EA",
            "converted_quantity": "1.00"
        ,
        
            "KUNNR": "0001234567",
            "KWMENG": "1",
            "MATNR": "000000000001000002",
            "NET_PRICE": "20.00",
            "NET_PRICE_PER_BASE_UNIT": "20.00",
            "ORDER": "1",
            "PRICE_INC_TAX": "23.40",
            "PRICE_INC_TAX_PER_BASE_UNIT": "23.40",
            "TOTAL_TIME": "Total Calculation Time: 12ms",
            "VRKME": "EA",
            "converted_quantity": "1.00"
        ,
        
            "KUNNR": "0001234567",
            "KWMENG": "1",
            "MATNR": "000000000001000003",
            "NET_PRICE": "20.00",
            "NET_PRICE_PER_BASE_UNIT": "21.00",
            "ORDER": "1",
            "PRICE_INC_TAX": "24.40",
            "PRICE_INC_TAX_PER_BASE_UNIT": "24.40",
            "TOTAL_TIME": "Total Calculation Time: 12ms",
            "VRKME": "EA",
            "converted_quantity": "1.00"
        
      ]
    
]

这是我正在尝试获取特定值的代码块,但它仍然不起作用:

public static void parseJson() 
    JSONParser jsonP = new JSONParser();

    try (FileReader reader = new FileReader("MyJson.json")) 
        // Read JSON File
        Object obj = jsonP.parse(reader);

         JSONArray priceList = ((JSONArray) obj).get("outputs"); 
         //1) getting error above line "The method get(int) in the type ArrayList is not applicable for the arguments (String)"

         //2) TODO: here I want to iterate only the "MATNR", "NET_PRICE", PRICE_INC_TAX values

     catch (FileNotFoundException e) 
        e.printStackTrace();
     catch (IOException e) 
        e.printStackTrace();
     catch (ParseException e) 
        e.printStackTrace();
    

我将非常感谢谁能解决我关于此方法的两个问题! 提前致谢

【问题讨论】:

最佳实践:使用 JSON 解析器。除此之外,没有“最佳实践”,只有许多可以以各种方式使用的不同 JSON 库。 在如何迭代 JSONObject? 的链接下还有另一个代码链接: 由于 JSON 文本以 [ 开头,它是一个 JSON 数组,并且您正确地将根对象转换为 JSONArrayoutputs 的值也是以[ 开头的,那你为什么要把emp.get("outputs") 转换成JSONObject,明明是一个数组呢? 仅供参考: Java JSON 库太多了,所以请说明您使用的是哪一个。 使用:import org.json.simple.parser.JSONParser; com.googlecode.json-simplejson-simple1.1.1 【参考方案1】:

我们使用 javax.json.* 库来做这类事情。

 try(JsonReader jsonReader = Json.createReader(new StringReader(myJsonString))) 
    JsonObject jsonObject = jsonReader.readObject();
    return jsonObject.getJsonArray("outputs");
    // TODO: don't return something, instead iterate over array and get attributes from objects.
 
 catch(Exception exception) 
    // TODO: Do something with exception
 

希望对你有帮助。

【讨论】:

以上是关于遍历 .json 文件并打印 JAVA 中的所有值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP遍历并打印指定目录下所有文件实例

如果所有值都相同,则循环遍历 bash 测试中的列 - AWK

Js 怎么遍历json对象所有key及根据动态key获取值

遍历文件夹中的所有文件夹并运行命令

在 AWK 中打印数组中的所有元素

java后台的json值怎么传给jsp页面,并进行遍历