[Java] Obtenir et gérer Json à partir d'une URL avec une API standard (javax.script)

introduction

Un mémo que j'ai un peu étudié car je pensais que je ne pourrais pas facilement gérer JSON sans utiliser une bibliothèque en Java

Je l'ai confirmé et vérifié avec Java8, mais il semble que javax.script provienne de Java6.

échantillon

Obtenez les informations météorologiques avec Get.

Spécifications du service Web météo --Weather Hacks --Informations météorologiques http://weather.livedoor.com/weather_hacks/webservice

Exemple de classe


public static void main(String[] args) {
  try {
    System.out.println("Le temps à Tokyo");
    URL url = new URL("http://weather.livedoor.com/forecast/webservice/json/v1?city=130010");
    String json;
    //Obtenir la communication vers String (entre parenthèses pour évaluer)
    try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));) {
      json = br.lines().collect(Collectors.joining("", "(", ")"));
    }// ↑ "({"forecasts":[{"dateLabel":"x",...},{"dateLabel":"y",...},...],...})"Une telle chaîne

    Bindings jsObj = (Bindings) new ScriptEngineManager().getEngineByName("js").eval(json);

    jsObj = (Bindings) jsObj.get("forecasts");
    // get(key)Vous pouvez l'obtenir avec, mais le retour est de type Object. Cast au besoin

    //Le tableau js est des valeurs()alors
    jsObj.values().stream()
        .map(o -> (Bindings) o)
        .map(o -> o.get("dateLabel") + "\t" + o.get("telop"))
        .forEach(System.out::println);

  } catch (Exception e) {
    e.printStackTrace();
  }//La gestion des exceptions est complètement compliquée. Pardon.
}

point

La partie importante est la conversion vers l'interface javax.script.Bindings.

La valeur de retour de ScriptEngine.eval () est la classe Object et l'instance lorsque Json est exécuté par ScriptEngine [ScriptObjectMirror](https://docs.oracle.com/javase/jp/9/docs/api/jdk/nashorn /api/scripting/ScriptObjectMirror.html) etc. ne peuvent pas être importés en raison de restrictions d'accès et ne peuvent pas être castés, il y a donc beaucoup d'informations sur les modèles qui sont exploités en utilisant pleinement la réflexion.

L'interface Bindings implémentée par ScriptObjectMirror hérite de Map \ <String, Object >. Vous pouvez donc simplement utiliser des méthodes Map telles que get (String key), keySet (), values () sans trop réfléchir. Non, si vous ne savez pas ce qu'est l'interface Bindings, vous pouvez la convertir en Map \ <?,? >.

Puisque la clé est une chaîne, je ne pense pas qu'il y ait de problème, mais le retour de get () est également une classe Object, donc si Json est profondément imbriqué, lancez-le avec Bindings ou Map et utilisez-le. Au fait, le tableau javascript semble être stocké pour être accessible par les touches ("0", "1", "2", ...) dont le numéro d'index est une chaîne de caractères. Cependant, je pense qu'il devrait être accédé en utilisant Map.values () en premier lieu.

Recommended Posts

[Java] Obtenir et gérer Json à partir d'une URL avec une API standard (javax.script)
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Gérez les exceptions avec fraîcheur avec les expressions lambda Java 8 et l'API Stream
[Kotlin] Obtenez le constructeur / la méthode Java de KFunction et appelez-le
Accédez à l'API Web avec Get sur Android et traitez Json (Java pour le moment)
Intégration API de Java avec Jersey Client
JSON en Java et Jackson Part ③ Incorporer JSON dans HTML et l'utiliser à partir de JavaScript
Obtenir la valeur des paramètres d'URL avec Get Mapping-LocalDate-
[Java] Obtenez et affichez la date 10 jours plus tard à l'aide de l'API Time ajoutée à partir de Java 8.
JSON avec Java et Jackson Part 2 XSS mesures
[Java] Obtenez des images avec l'API Google Custom Search
[Développement Android] Obtenez des images du serveur avec Java et définissez-les dans ImageView! !!
[Java] Obtenez des métadonnées à partir de fichiers avec Apathce Tika, et obtenez la largeur et la hauteur des images / vidéos à partir des métadonnées [Kotlin]
Gérez JSON avec minimal-json
Mémorandum n ° 4 "Obtenez une chaîne de caractères et décorez-la" [Java]
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
[Java] Obtenir le jeu de caractères avec Apathce Tika / Initialiser la chaîne à partir du jeu de caractères [Kotlin]
Implémentez l'interface Java dans la classe JRuby et appelez-la depuis Java
Obtenez des informations vidéo de Nikorepo et envoyez-les à Slack
Corrigez le code de caractère en Java et lisez à partir de l'URL
Obtenir des attributs et des valeurs à partir d'un fichier XML en Java
Convertissez Excel en Blob avec java, enregistrez-le, lisez-le à partir de DB et exportez-le sous forme de fichier!
[Java] Communication JSON avec jackson
Rechercher et exécuter une méthode à partir d'une instance avec traitement (java)
Installez le plugin memcached sur MySQL et accédez à partir de Java
Java, JS (jQuery) et Ajax. Obtenez une valeur spécifique de JSON.
Obtenez les résultats Flux de Spring Web Flux de JS avec Fetch API
[Java] Comment convertir du type String en type Path et obtenir le chemin
Lire la pression et la température de Raspberry Pi 3 et BMP180 avec Java
[Java] Affiche le résultat de ffprobe -show_streams dans JSON et mappe-le à un objet dans Jackson