如何从字符串中取多个数字到双变量

时间:2017-03-12 06:19:54

标签: java eclipse

我想将一些字符串中的值传递给double变量。字符串输出如下所示:

{
    "high":"1635.07",
    "last":"1635.07",
    "timestamp":"1489299397",
    "volume":"321.34139374",
    "vwap":"1602.72987907",
    "low":"1595.03",
    "ask":"1635.89",
    "bid":"1605.10"
}

我只想让这些数据像:

double high = (value of high in string);
double last = (value of last in string);

等...

我遇到麻烦,因为java会抛出一个错误,因为混合了单词和数字。 在此先感谢您的帮助。

代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.swing.JOptionPane;


public class btc {

        private final String USER_AGENT = "Mozilla/5.0";

        public static void main(String[] args) throws Exception {

            btc http = new btc();
            http.sendGet();

        }

        // HTTP GET request
        private void sendGet() throws Exception {

            String url = "https://api.quadrigacx.com/v2/ticker?book=btc_cad";

            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();

            // optional default is GET
            con.setRequestMethod("GET");

            //add request header
            con.setRequestProperty("User-Agent", USER_AGENT);

            System.out.println("\nSending 'GET' request to URL : " + url);

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }

            //write to variables


            String test = response.toString();

            //double high = test("high");

            //Double high = Double.parseDouble(test);

            System.out.println(test);
            //print result
            //JOptionPane.showMessageDialog(null, response.toString());

        }


}

1 个答案:

答案 0 :(得分:0)

正如评论中已经提到的那样,您从服务器接收的是QuadrigaCX's API description中记录的JSON对象,因此应该对其进行解析,因为成员的顺序可能会随着空白而变化。

这个JSON字符串的有趣之处在于所有值实际上都是字符串,因为它们用双引号括起来。但是这些字符串包含可以解释和解析为double的值。

使用minimal-json,它是一个简约的Java库,允许您直接解析JSON并访问包含的值。以下代码使用它并“读取”highlast作为双值:

JsonObject jsonObject = Json.parse(responseBody).asObject();
double high = Double.parseDouble(jsonObject.get("high").asString());
double last = Double.parseDouble(jsonObject.get("last").asString());

此处responseBody对应于您在test方法中命名为sendGet的内容,并且是来自Web服务器的响应,作为一个字符串。