2015-10-30 5 views
1
//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); 

ул напечатает строку типа:как получить конкретное значение из строки JSON

{"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

Ваша строка не муравей само представление 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" 
} 

here См для различного представления JSon строки

Код образца с использованием библиотеки Джексоном

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); 
    } 

} 
+0

милый я тоже буду помнить. – Acewin

+0

Также вы могли бы добавить, что произойдет, если это список объектов. – Acewin

+0

JSONObject.get («coord») Я не уверен, что вы подразумеваете под этим. Должен ли я создать объект первым JSONObject obj = new JSONObject(); ?? –

0

для тех, кто смотрит на это в будущем,

использованием 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 теперь содержит s (в моем случае) объект, содержащий несколько объектов (** будет редактировать, когда когда я уверен, что это то, что я думаю)

теперь использует этот код и используя 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»

Когда я выясню, как получить определенное значение, я снова отредактирую.

0

Вы можете сделать это с помощью:

  1. шаблон
  2. Сличитель
  3. ObjectMapper
  4. JsonNode

Java класс:

private Pattern pattern; 
    private Matcher matcher; 

    private static final String PATTERN = "description"; 

    private static String StringFinal = null; 

    public void printAll(String str) { 

     pattern = Pattern.compile(PATTERN); 
     String finalPattern = null; 

     ObjectMapper mapper = new ObjectMapper(); 
     JsonNode node = mapper.readTree(str); 
     Iterator<String> fieldNames = node.fieldNames(); 


     while(fieldNames.hasNext()){ 
      String fieldName = fieldNames.next(); 
      JsonNode fieldValue = node.get(fieldName); 

      if (fieldValue.isObject()) { 
       printAll(fieldValue); 
      } 
      else { 
       String value = fieldValue.asText(); 
       matcher = pattern.matcher(value); 
       if(matcher.matches()){ 
        StringFinal = value; 
        break; 
       } 
      } 
     } 

     System.out.println(StringFinal); 
    } 
Смежные вопросы