如何从JSON字符串中获取特定值

时间:2015-10-30 16:58:08

标签: java json

//Open url and fetch JSON data
String s = "MY_URL_HERE";
URL url = new URL(s);
Scanner scan = new Scanner(url.openStream());
String str = new String();
while (scan.hasNext())
{
    str += scan.nextLine();
}
scan.close();

System.out.println(str);

str会打印一个字符串,如:

{"coord":{"lon":-80.25,"lat":43.55},"weather":[{"id":800,"main":"Clear","description":"Sky is Clear","icon"...ect

我正在使用json_simple-1.1.jar

如何实际使用此字符串来提取我选择的值?如果我想拉出“描述”或“天气”。

我尝试过以下代码:

https://code.google.com/p/json-simple/wiki/DecodingExamples

这些对我不起作用,我收到错误

org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray

3 个答案:

答案 0 :(得分:3)

你的字符串不是ant json数组表示,而是json对象本身。那是org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray描述的错误。链接中的示例描述了一个数组,该数组的每个元素都是一个对象:

考虑Jackson libray,它非常便于将Java对象转换为JSON

下面表示一个数组,该数组的每个元素都是一个对象:

[
    {
        color: "red",
        value: "#f00"
    },
    {
        color: "green",
        value: "#0f0"
    }
]

or

[
    {
        "color": "red",
        "value": "#f00"
    },
    {
        "color": "green",
        "value": "#0f0"
    }
]

下面代表对象

{
    color: "red",
    value: "#f00"
}

or

{
    "color": "red",
    "value": "#f00"
}

有关json字符串的不同表示,请参阅here

使用jackson库的代码示例

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;


public class TestString {

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

        String s="{\"coord\":{\"lon\":-80.25,\"lat\":43.55},\"weather\":[{\"id\":800,\"main\":\"Clear\",\"description\":\"Sky is Clear\"}]}";
        //String s="[{\"coord\":\"test\",\"lon\":-80.25}]";
        ObjectMapper mapper = new ObjectMapper();
        Object obj = mapper.readValue(s, Object.class );
        System.out.println("terst"+ obj );
    }

}

答案 1 :(得分:2)

对于将来看这个的人来说,

使用json_simple-1.1.jar

    String s = "YOUR_URL_HERE";
    URL url = new URL(s);
    Scanner scan = new Scanner(url.openStream());
    String str = new String();
    while (scan.hasNext())
    {
        str += scan.nextLine();
    }
    scan.close();

str现在包含(在我的情况下)一个包含更多对象的对象(**当我确定时会编辑,这就是我的想法)

现在使用此代码并使用http://codebeautify.org/jsonviewer

    JSONObject obj = (JSONObject) JSONValue.parse(str);

    String info = obj.get("object_name_you_wish_to_call").toString();

我看到上面的代码将输出另一个包含该特定对象中所有信息的对象。在这种情况下,“object_name_you_wish_to_call”中的所有对象

当我弄清楚如何检索特定值时,我会再次编辑。

答案 2 :(得分:0)

  

您可以使用以下方式执行此操作:

  1. 模式
  2. 匹配器
  3. ObjectMapper
  4. JsonNode
  5. Java类:

    URL = "www.vulnuryrweb.com"
    
    char1 = Left(URL, 1)
    char2 = Mid(URL, 2, 1)
    
    isValid = ( char1 = "/" And char2 <> "/" And char2 <> "\" )
    
    MsgBox isValid