【问题标题】:Python to java conversionPython 到 java 的转换
【发布时间】:2014-03-17 01:51:27
【问题描述】:

我的原始 python 脚本如下。

#!/usr/bin/env python

import math,sys
import json
import urllib

def gsearch(searchfor):
  query = urllib.urlencode({'q': searchfor})
  url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query
  search_response = urllib.urlopen(url)
  search_results = search_response.read()
  results = json.loads(search_results)
  data = results['responseData']
  return data

args = sys.argv[1:]
m = 45000000000
if len(args) != 2:
        print "need two words as arguments"
        exit
n0 = int(gsearch(args[0])['cursor']['estimatedResultCount'])
n1 = int(gsearch(args[1])['cursor']['estimatedResultCount'])
n2 = int(gsearch(args[0]+" "+args[1])['cursor']['estimatedResultCount'])

我正在把它转换成java。我已经完成了以下所有操作。我被困在这里 search_results = search_response.read() results = json.loads(search_results) data = results['responseData'] 。我不知道如何将这 3 行转换为 java。

import java.io.*;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLEncoder;
import java.net.URLConnection;

public class gi {

   public static void main (String[] args) {

     if(args.length==2){

         for(int i = 0; i < args.length; i++) {
                System.out.println("I IS : "+i+":"+args[i]);
            }
         int n0 = searchGoogle(args[0]);
         int n1 = searchGoogle(args[1]);
         int n2 = searchGoogle(args[0]+" "+args[1]);
     }
     else{
        System.out.println("Not enough arguement");
     }
   }
   public static int searchGoogle(String searchQuery)
   {
    try{

    String query=URLEncoder.encode(searchQuery, "UTF-8");
    String url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s" + query;
    URLConnection connection = new URL(url).openConnection();
    }
    catch(Exception e){
    }
    int pageQty=0;
    return pageQty;
   }

}  // end of ReadString class

【问题讨论】:

  • 您可以尝试使用 jython 来运行您的 python 代码而不是将其转换为 java 吗?
  • 我从来没有遇到过jyhton?我需要稍后将其提供给其他 java 应用程序的问题,这就是我转换并停留在这 3 行的原因
  • 如果您想从 java 环境中运行 python 代码以实现与 java 的互操作性,您可以使用 jython。见en.wikipedia.org/wiki/Jython

标签: java python-3.x


【解决方案1】:

您应该能够使用以下内容(来自this stack overflow answer)来完成这项工作。

String a = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s";
url = new URL(a);
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

URLConnection 获得BufferedReader 后,您可以get a String object from it

StringBuilder builder = new StringBuilder();
String aux = "";

while ((aux = reader.readLine()) != null) {
    builder.append(aux);
}

String text = builder.toString();

一旦你有了 String 对象,你就可以将它传递给你的 JSONObject 构造函数。 (来自this stack overflow answer)。

使用org.json 库:

JSONObject jsonObj = new JSONObject(text);

现在您已经有了 JSONObject,您可以使用可用的方法来提取您需要的数据。

例如:

JSONObject cursorObj = jsonObj.getJSONObject("cursor");
int resultCount = cursorObj.getInt("resultCount");

【讨论】:

  • 我添加了这个 URLConnection connection1 = new URL(url).openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(connection1.getInputStream()));但是我应该将什么发送到 JSONOBJECt 中?
  • 好的,我可以准备好结果了,我现在剩下的唯一挑战是寻找 "cursor":{"resultCount":"58,800,000"," 并最终获得 resultCount 值。
  • 我已经更新了答案以包含一种从 URLConnection 的 BufferedReader 获取字符串的方法。在将字符串传递给 JSONObject 构造函数之前,您可能必须对其进行格式化。
  • 是的,我已经按照您的方式获取了文本,文本中的内容部分是这个“光标”:{“resultCount”:“58,800,000”,我的最终目标是提取resultCount 的数值
  • 有关从 JSON 对象中提取数据的示例,请查看我们的答案:stackoverflow.com/questions/15918861/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2014-05-14
  • 2018-06-11
  • 2013-12-22
  • 2013-04-16
  • 2011-10-09
  • 1970-01-01
相关资源
最近更新 更多