从Java中的长json字符串中获取十进制数字流[重复]

问题描述 投票:-1回答:3

注:问题是从json字符串创建数字流,最好使用正则表达式。请不要将此问题视为正则表达式上其他内容的重复。我的主要目标是阅读数字流。为此使用正则表达式是可选的。

我的目标是创建一个从大json字符串中读取的十进制数字数组,看起来像下面的示例。

示例输入:

{ "item1": 102.119, "item2": "unknown", "item3": 200.12, "item4": 1.08, "item5": 0.04 }

预期输出:

我的数据= [102.119,200.12,1.08,0.04]

我尝试过的事情:

import java.util.ArrayList; public class MyData { public static void main(String[] args) { String input = ("{\"item1\": 102.119," + "\"item2\": \"unknown\"," + "\"item3\": 200.12," + "\"item4\": 1.08," + "\"item5\": 0.04}" ); ArrayList<Double> output = new ArrayList<>(); for(String s1 : input.split(",")) { for(String s2: s1.split(":")) { try { output.add(Double.parseDouble(s2)); } catch(Exception e) { System.out.println(e.toString() + " : " + s2 + " is not a number!"); } } } System.out.println("\nMy Data = " + output.toString()); } }

实际输出:

$ javac MyData.java $ java MyData java.lang.NumberFormatException: For input string: "{"item1"" : {"item1" is not a number! java.lang.NumberFormatException: For input string: ""item2"" : "item2" is not a number! java.lang.NumberFormatException: For input string: ""unknown"" : "unknown" is not a number! java.lang.NumberFormatException: For input string: ""item3"" : "item3" is not a number! java.lang.NumberFormatException: For input string: ""item4"" : "item4" is not a number! java.lang.NumberFormatException: For input string: ""item5"" : "item5" is not a number! java.lang.NumberFormatException: For input string: "0.04}" : 0.04} is not a number! My Data = [102.119, 200.12, 1.08]

问题:

    最终数字
  1. 0.04
未读入数据数组。两个
  • for
  • 循环需要很长时间才能在大型输入集上执行。

    需要帮助:

    您能否以更有效的方式帮助改进代码以读取所有十进制数字?

    您能否让我知道正则表达式模式匹配是否可以用于这种情况?

    java arrays json stream double
    3个回答
    3
    投票
    同时使用String-splitting和RegEx,有些讨厌的情况。如果您不能完全控制JSON,则不建议您尝试这样做。

    [最好使用现有的库,例如org.json或GSON来解析JSON。两者都提供了一个对象结构,您可以像当前解决方案一样循环和提取。

    https://devqa.io/how-to-parse-json-in-java/


    1
    投票
    尝试使用此正则表达式:

    /: (\d+(?:\.\d+))/


    1
    投票
    也许这可以帮助您吗?

    /: (\d+\.\d+)/

    © www.soinside.com 2019 - 2024. All rights reserved.