有时候需要远程从其他接口中获取json数据,如果遇到返回的json数据是一个文件而不直接是数据,那么可以通过以下方法进行读取:

/**
* 从数据接口获取到数据
* @return
* @throws Exception
*/
public String readData() throws Exception {
//创建StringBuffer类型的变量json,用于存放拼装好的json数据
//StringBuffer json = new StringBuffer("");
String json = "";
//url中不可以出现空格,空格全部用%20替换
String url = "http://192.168.1.190:8888/api/CityData/GetMonitorData?apikey=?&startTime=2017-03-12%2012:00:00&endTime=2017-03-14%2012:00:00&uCode=?&pCode=?,?,?,?,?&datatype=?&isSrc=?";
URL urls = new URL(url);
java.net.HttpURLConnection conn = (java.net.HttpURLConnection)urls.openConnection();
//因为服务器的安全设置不接受Java程序作为客户端访问,解决方案是设置客户端的User Agent
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
conn.setDoOutput(true);
conn.setDoInput(true);
//只可以设置为GET方式,不可以使用POST方式
//conn.setRequestMethod("POST");
conn.setRequestMethod("GET");

      //设置编码格式为UTF-8

      conn.setRequestProperty("contentType", "UTF-8");

//得到输入流
InputStream inputStream = conn.getInputStream();
//从输入流中获取数据(一定要设置编码格式,不然在服务器端接收到的数据可能乱码)
BufferedReader bf=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
String line=null;
while((line=bf.readLine())!=null){//一行一行的读
json = json + line;
}
if(inputStream!=null){
inputStream.close();
}
String[] strs = json.split("\\\\");
String str = "";
StringBuffer jsons = new StringBuffer("");
for (int i = 0; i < strs.length; i++) {
str = strs[i];
jsons = jsons.append(str);
}
jsons.replace(0, 1, "");
jsons.replace(jsons.length()-1, jsons.length(), "");
this.jsonObject = jsons.toString();
return JSON;
}