如何在Java中没有字段名称的情况下获取jsonArray的值?

时间:2019-07-08 02:46:45

标签: java json api

我想从此link

获取JSON数组值

jsonArray格式如下

["bulgari",["bulgaria","bulgari aqua","bulgarian","bvlgari man","bulgarian yogurt","bvlgari ring","bulgaria cup","bulgari bali","bvlgari man in black","bvlgari aqva","bvlgari omnia","bulgari hotel","bulgarian yoghurt","bvlgari pour homme","bvlgari rose","bulgaria u19","bulgaria vs kosovo","bulgaria first professional football league playoff","bulgarian journal of agricultural science","bulgaria negara miskin"],["","","","","","","","","","","","","","","","","","","",""],[],{"google:clientdata":{"bpc":false,"tlw":false},"google:suggestrelevance":[750,601,600,566,565,564,563,562,561,560,559,558,557,556,555,554,553,552,551,550],"google:suggesttype":["QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY","QUERY"],"google:verbatimrelevance":1300}]

我希望结果是像这样获取值

bulgaria,bulgari aqua,bulgarian,bvlgari man,bulgarian yogurt,bvlgari ring,bulgaria cup,bulgari bali,bvlgari man in black,bvlgari aqva,bvlgari omnia,bulgari hotel,bulgarian yoghurt,bvlgari pour homme,bvlgari rose,bulgaria u19,bulgaria vs kosovo,bulgaria first professional football league playoff,bulgarian journal of agricultural science,bulgaria negara miskin

这是我尝试过的

String sURL = "http://suggestqueries.google.com/complete/search?q=bulgari&client=chrome"; //just a string
JSONArray json = new JSONArray();
    // Connect to the URL using java's native library
    URL url = new URL(sURL);
    URLConnection request = url.openConnection();
    request.connect();
    JSONArray values = json.getJSONArray(0);
  for (int i = 0; i < json.length(); i++) {

    JSONObject item = values.getJSONObject(i); 

    System.out.println(item);
  }

但是结果显示了这样的错误消息

cd C:\Users\LENOVO\Documents\NetBeansProjects\testAPI; "JAVA_HOME=C:\\Program Files\\Java\\jdk-12" cmd /c "\"\"C:\\Users\\LENOVO\\Downloads\\netbeans\\java\\maven\\bin\\mvn.cmd\" -Dexec.args=\"-classpath %classpath com.mycompany.testapi.testAPI\" -Dexec.executable=\"C:\\Program Files\\Java\\jdk-12\\bin\\java.exe\" -Dexec.classpathScope=runtime -Dmaven.ext.class.path=C:\\Users\\LENOVO\\Downloads\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec\""
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.
Scanning for projects...

------------------------------------------------------------------------
Building testAPI 1.0-SNAPSHOT
------------------------------------------------------------------------

--- exec-maven-plugin:1.5.0:exec (default-cli) @ testAPI ---
Exception in thread "main" org.json.JSONException: JSONArray[0] not found.
    at org.json.JSONArray.get(JSONArray.java:218)
    at org.json.JSONArray.getJSONArray(JSONArray.java:405)
    at com.mycompany.testapi.testAPI.main(testAPI.java:87)
Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:404)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine(ExecMojo.java:764)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine(ExecMojo.java:711)
    at org.codehaus.mojo.exec.ExecMojo.execute(ExecMojo.java:289)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 1.796 s
Finished at: 2019-07-08T09:41:51+07:00
Final Memory: 7M/30M
------------------------------------------------------------------------
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.5.0:exec (default-cli) on project testAPI: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

注意: *我正在使用jdk 11和netbeans IDE 11.0

2 个答案:

答案 0 :(得分:0)

类似这样的方法可能会解决问题:

        String sURL = "http://suggestqueries.google.com/complete/search?q=bulgari&client=chrome"; //just a string
        InputStream is = new URL(sURL).openStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
          sb.append((char) cp);
        }        
        JSONArray jsonArray = new JSONArray(sb.toString());
        JSONArray myData = jsonArray.getJSONArray(1);
        for (int i = 0; i < myData.length(); i++) {
            System.out.println(myData.getString(i));
        } 

答案 1 :(得分:0)

这是JSON-P API的示例(请参阅参考资料)。

      try (var stream = new URL(sURL).openStream())
      {
         var reader = Json.createReader(stream);
         var array = reader.readArray();
         System.out.println(array.toString());
      }
      catch (IOException ex)
      {
         // log exception here
         ex.printStackTrace(System.err);
      }