我想将一些字符串中的值传递给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());
}
}
答案 0 :(得分:0)
正如评论中已经提到的那样,您从服务器接收的是QuadrigaCX's API description中记录的JSON对象,因此应该对其进行解析,因为成员的顺序可能会随着空白而变化。
这个JSON字符串的有趣之处在于所有值实际上都是字符串,因为它们用双引号括起来。但是这些字符串包含可以解释和解析为double的值。
使用minimal-json,它是一个简约的Java库,允许您直接解析JSON并访问包含的值。以下代码使用它并“读取”high
和last
作为双值:
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服务器的响应,作为一个字符串。