用socket怎么获得javaWeb返回的json

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用socket怎么获得javaWeb返回的json相关的知识,希望对你有一定的参考价值。

用socket获得javaWeb返回的json的方法:
1、编写客户端解析json的方法client.c代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <json/json.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main()

/* all previous code until
printf("Size of string- %lu\n", sizeof(json_object_to_json_string(jobj)))*/

char temp_buff[MAX_SIZE];

if (strcpy(temp_buff, json_object_to_json_string(jobj)) == NULL)

perror("strcpy");
return EXIT_FAILURE;


if (write(fd, temp_buff, strlen(temp_buff)) == -1)

perror("write");
return EXIT_FAILURE;


printf("Written data\n");
return EXIT_SUCCESS;

2、服务端生成json的server.c代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <json/json.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main()

/* all previous code until
printf("Reading from client\n"); */

ssize_t r;

char buff[MAX_SIZE];

for (;;)

r = read(connfd, buff, MAX_SIZE);

if (r == -1)

perror("read");
return EXIT_FAILURE;

if (r == 0)
break;

printf("READ: %s\n", buff);


return EXIT_SUCCESS;

其中用json_object_to_json_string把服务端返回的json对象转换成json字符串,传入解析器进行读取。
参考技术A 字符流?
InputStream is=socket.getInputStream();

如何用java获取百度API返回的json数据的?

http://api.map.baidu.com/place/v2/search?&query=%E9%93%B6%E8%A1%8C®ion=%E6%B5%8E%E5%8D%97&output=json&ak=E4805d16520de693a3fe707cdc962045
我想使用百度的Place API 得到检索到信息。求java方法!最后由实例!

1:是拼接需要的json数据。
2:是用servlet的内置对象response返回到前台。
3:String 类型的数据可以不用借助任何工具直接返回,只要把它拼接对了就可以。如我需要返回一个“success”:true,“msg”:“修改失败!”的json(注意,java里的引号要用的转义字符“\”)。
4:如果需要返回的是一个list或者别的类的化,需要用到JSONArray的辅助工具类,然后使用response.getWriter().print(),返回到打到前台。方法2:用Spring框架。
5:如果你使用了Spring框架那就更简单了,你只需要在你的方法返回的时候加一个@ResponseBody的注解就可以了。就这么简单。注意第一种方法,拼接json串的时候需要用的到双引号的地方添加转义字符。
参考技术A import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class HttpRequestUtil 

    /**
     * 从url请求中获得返回的字符串
     *
     * @param requestUrl
     * @return JSON字符串
     */
    public static String HttpRequest(String requestUrl) 
        StringBuffer sb = new StringBuffer();
        InputStream ips = getInputStream(requestUrl);
        InputStreamReader isreader = null;
        try 
            isreader = new InputStreamReader(ips, "utf-8");
         catch (UnsupportedEncodingException e) 
            e.printStackTrace();
        
        BufferedReader bufferedReader = new BufferedReader(isreader);
        String temp = null;
        try 
            while ((temp = bufferedReader.readLine()) != null) 
                sb.append(temp);
            
            bufferedReader.close();
            isreader.close();
            ips.close();
            ips = null;
         catch (IOException e) 
            e.printStackTrace();
        
        return sb.toString();
    

    /**
     * 从请求的URL中获取返回的流数据
     * @param requestUrl
     * @return InputStream
     */
    private static InputStream getInputStream(String requestUrl) 
        URL url = null;
        HttpURLConnection conn = null;
        InputStream in = null;
        try 
            url = new URL(requestUrl);
         catch (MalformedURLException e) 
            e.printStackTrace();
        
        try 
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setRequestMethod("GET");
            conn.connect();

            in = conn.getInputStream();
         catch (IOException e) 
            e.printStackTrace();
        
        return in;
    
    

追问

数据是请求到了,可是为什么我一直返回staus:102啊?安全码什么都是对的····

追答

我看了,首先你的URL中传的汉字要用UTF-8编码,然后这个令牌你用的是百度API上面的,这个不行。程序中用你自己的令牌,就可以了。

本回答被提问者采纳
参考技术B 这个看你什么样的需求了,如果你是要在服务器抓取数据,那么使用HttpClient来模拟请求,然后搞一个java 转json的包,将字符串转化为对象,进行处理,TttpClient的使用方法你可以直接搜索一下,有例子的。 如果你是在网页中用到,那么直接使用Ajax请求该路径,使用eval()方法将字符串转为JavaScript对象,进行处理,这样可以省去服务器的开销。 参考技术C 如果是使用java获取Json数据可以使用HttpClient 如果要解析json数据,我推荐用js的eval()方法。

以上是关于用socket怎么获得javaWeb返回的json的主要内容,如果未能解决你的问题,请参考以下文章

js怎么获得用ajax返回的response内容

ajax前台提交数据,Json数据在java后台怎么取出来

java或者scala写socket客户端发送头消息和消息体到服务端并接收返回信息,这个头消息怎么写

java怎么删除web服务器上文件里的图片

在 java web开发中怎么使用json?

如何用java获取百度API返回的json数据的?