从嵌套JSON中提取Java
我想在我的程序中使用雅虎的财务数据,它已经起作用了。我得到了完整的JSON内容,并且可以显示它。但是现在我想提取价格为int从嵌套JSON中提取Java,java,json,extract,Java,Json,Extract,我想在我的程序中使用雅虎的财务数据,它已经起作用了。我得到了完整的JSON内容,并且可以显示它。但是现在我想提取价格为int public class Main { public static void main (String[]args) throws IOException { String sURL = "http://finance.yahoo.com/webservice/v1/symbols/googl/quote?format=json"; //just a string
public class Main {
public static void main (String[]args) throws IOException {
String sURL = "http://finance.yahoo.com/webservice/v1/symbols/googl/quote?format=json"; //just a string
// Connect to the URL using java's native library
URL url = new URL(sURL);
HttpURLConnection request = (HttpURLConnection) url.openConnection();
request.connect();
// Convert to a JSON object to print data
JsonParser jp = new JsonParser(); //from gson
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //convert the input stream to a json element
JsonObject rootobj = root.getAsJsonObject(); //may be an array, may be an object.
System.out.print(rootobj);
}
}
编辑
这是来自yahoo的JSON数据
{
"list" : {
"meta" : {
"type" : "resource-list",
"start" : 0,
"count" : 1
},
"resources" : [
{
"resource" : {
"classname" : "Quote",
"fields" : {
"name" : "Google Inc.",
"price" : "554.520020",
"symbol" : "GOOGL",
"ts" : "1432324800",
"type" : "equity",
"utctime" : "2015-05-22T20:00:00+0000",
"volume" : "1213288"
}
}
}
]
}
}
编辑2
我改了密码
JsonParser jp = new JsonParser(); //from gson
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //convert the input stream to a json element
JsonObject obj = root.getAsJsonObject();
JsonObject result = obj.get("list").getAsJsonObject();
String result2 = result.get("resources").toString();
System.out.print(result2);
现在我已经知道了
[{"resource":{"classname":"Quote","fields":{"name":"Google Inc.","price":"554.520020","symbol":"GOOGL","ts":"1432324800","type":"equity","utctime":"2015-05-22T20:00:00+0000","volume":"1213288"}}}]
我现在怎样才能得到“价格”
编辑3
好的,我现在拿到了,它很有效,我只拿到了双倍的价格,但是这是解决这个问题的明智方法吗
// Convert to a JSON object to print data
JsonParser jp = new JsonParser(); //from gson
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //convert the input stream to a json element
JsonObject obj = root.getAsJsonObject();
JsonObject result = obj.get("list").getAsJsonObject();
JsonArray result2 = result.get("resources").getAsJsonArray();
JsonObject result3 = result2.get(0).getAsJsonObject();
JsonObject result4 = result3.get("resource").getAsJsonObject();
JsonObject result5 = result4.get("fields").getAsJsonObject();
String result6 = result5.get("price").toString();
result6 = result6.replace("\"", "");
double value = Double.parseDouble(result6);
System.out.print(value);
您应该到达“字段”对象以提取“名称”、“价格”等。
org.json
库易于使用。下面的示例代码:您的响应为字符串:
JSONObject obj1 = new JSONObject(response);
JSONArray arr = obj1.getJSONObject("list").getJSONArray("resources"); //GETS RESOURCES ARRAY
for (int i = 0; i < arr.length(); i++)
{
String resource = arr.getJSONObject(i).toString();
JSONObject obj2 = new JSONObject(resource);
String resourceObject = obj2.getJSONObject("resource").toString(); //RESOURCE OBJECT
JSONObject obj3 = new JSONObject(resourceObject);
String name = obj3.getJSONObject("fields").getString("name"); //REACHED THE FIELDS
float price = (float)obj3.getJSONObject("fields").getDouble("price");
System.out.println(name);
System.out.println(price);
}
JSONObject obj1=新的JSONObject(响应);
JSONArray arr=obj1.getJSONObject(“列表”).getJSONArray(“资源”)//获取资源数组
对于(int i=0;i
下载:他已经在使用gson了 如果您想继续使用gson并了解其结构,可以创建存储数据的类
class GoogleRequest{
private GoogleList list;
public GoogleList getList() {
return list;
}
public void setList(GoogleList list) {
this.list = list;
}
}
// class for list
class GoogleList{
private Meta meta;
private List<Resources> resources;
public List<Resources> getResources() {
return resources;
}
public void setResources(List<Resources> resources) {
this.resources = resources;
}
public Meta getMeta() {
return meta;
}
public void setMeta(Meta meta) {
this.meta = meta;
}
}
// create other classes here like the Resources class
JsonParser jp = new JsonParser(); // from gson
JsonElement root = jp.parse(new InputStreamReader((InputStream)request.getContent()));
GoogleRequest list = new Gson().fromJson(root,GoogleRequest.class);
如果您不知道它是数组还是对象,请创建不同的类来为您处理它。只需使用new Gson()解析数据即可
现在请记住,您需要作业的正确属性。假设您有java中的json
String json = "{\"price\" : \"554.520020\"}";
那么价格就需要加倍或加倍。如果您使用Double,您可以检查
if( obj.getPrice() != null ){
System.out.println( obj.getPrice().intValue() );
}
注意:如果将double转换为int,将失去精度不清楚您的要求。你到底想拆分什么?你能提供一个明确的例子吗?我想分割JSON数据,以获取作为int值的价格。也许你是指提取数据(而不是分割)?你是否考虑过使用JSON解析器,如Gson?请检查我的编辑2。请检查我的编辑2。为资源对象创建一个持有者。并如上所述对其进行解析。想要完整的代码示例,请让我知道。我现在得到了它,它可以工作,请检查我的编辑3,如果这是一个聪明的解决方案或不是。
if( obj.getPrice() != null ){
System.out.println( obj.getPrice().intValue() );
}