服务端提供的JSON数据接口与用户端接收解析JSON数据

首先来了解下JSON格式解析

json结构的格式就是若干个 键/值(key, value) 对的集合,该集合可以理解为字典(Dictionary),每个 键/值 对可以理解成一个对象(Object)。 键/值 对中的 键(key) 一般是 一个string,值(value)可以是string、double、int等基本类型,也可以嵌套一个 键/值 对,也可以是一个数组,数组里面的数据的类型可以是基本类型,或者 键/值 对。可以看出 键/值 本来没什么,只是嵌套得多了就会觉得混乱,下面举个具体的例子来说明。注:该代码只是用来举例说明,并不能正确运行。

 1             var testJson = {                       2                             "Name" :      "奥巴马" , 3                             "ByName" :    ["小奥","小巴","小马"], 4                             "Education" : { 5                                            "GradeSchool" :  "华盛顿第一小学", 6                                            "MiddleSchool" : ["华盛顿第一初中" , "华盛顿第一高中"], 7                                            "University" :  {  8                                                               "Name" : "哈佛大学", 9                                                               "Specialty" : ["软件工程","会计"]10                                                             }11                                       }12                         }

变量testJson就是一个json对象,testJson对象包括三个 键/值 对。

第一个 键/值 对: 键(key)是"Name“ ,其对应的值(value)是 "奥巴马" ,即 testJson["Name"]  == "奥巴马"

第二个 键/值 对: 键 是 "ByName" ,值是一个数组,是一个string集合。有必要的话,数组里面的元素也可以是 键/值 对。

第三个 键/值 对: 键 是 "Education",值是一个 Json对像,该json对象包括三个 键/值 对,这就是嵌套了。。。

总结:json对象就是若干个 键/值 对的集合,键是string,值可以是基本类型,或者嵌套一个Json对象,或者是一个数组(数组里的元素可以是基本类型,也可以是json对象,可以继续嵌套)。

获取名字:testJson["Name"]

获取第一个别名:testJson["ByName"][0] 。testJson的 键"ByName" 对应的值 是一个string数组

获取小学名字: testJson["Education"]["GradeSchool"] , 获取大学主修专业:testJson["Education"]["University"]["Specialty"][0]

下面举个实例:

定义一个符合json格式要求的字符串:

string testJson = "{\"Name\" : \"奥巴马\",\"ByName\" : [\"小奥\",\"小巴\",\"小马\"],\"Education\":{\"GradeSchool\" : \"华盛顿第一小学\",\"MiddleSchool\" : [\"华盛顿第一初中\" , \"华盛顿第一高中\"], \"University\" :{ \"Name\" : \"哈佛大学\", \"Specialty\" : [\"软件工程\",\"会计\"]}}}";            

然后需要用该字符串作为参数new 一个 JsonObject对象。微软自带的类库 System.Json ,然后添加命名空间 using System.Json;

主要代码就一句:JsonObject js = JsonObject.Parse(testJson); 用字符串testJson 作为参数new 一个 JsonObject 对象。通过监视我们可以看到js里面的内容和预料的一样,通过下面这幅图你应该可琢磨出很多东西来吧

额外插一句:js["Education"]["University"]["Specialty"] 的内容是 {[  "软件工程",  "会计"]},

但js["Education"]["University"]["Specialty"].Contains( "软件工程") 的值 是false。原因自己琢磨

通过Servlet创建服务端JSON数据

服务端提供JSON数据接口:http://192.168.0.129:8080/JSONInterface/JsonServlet

package JsonManager;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
/**
 * JSONObject 创建一个JSON对象并out.write();
 * @author Dana·Li
 */
public class JsonServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");      //解决中文乱码问题

        PrintWriter out = response.getWriter();
        Map map = new HashMap(); 

        map.put("name", "Dana、Li");
        map.put("age", new Integer(22));
        map.put("Provinces", new String("广东省"));
        map.put("citiy", new String("珠海市"));
        map.put("Master", new String("C、C++、Linux、Java"));
        JSONObject json = JSONObject.fromObject(map); 

        out.write(json.toString());
        out.flush();
        out.close();
    }

}

开启服务查看是否已经开启~

客户端调用接口解析JSON数据

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
/**
 * 接收服务端Json数据
 * @author Dana·Li
 */
public class GetJsonInterfaceInfo{
    private static String urlPath="http://192.168.0.129:8080/JSONInterface/JsonServlet";
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        //ServerFactory.getServer(8080).start();
        //列出原始数据
        StringBuilder json = new StringBuilder();   

        URL oracle = new URL(GetJsonInterfaceInfo.urlPath);
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(),"UTF-8"));
        String inputLine = null;
        while ( (inputLine = in.readLine()) != null){
            json.append(inputLine);
        }
        in.close();
        String Strjson=json.toString();
        System.out.println("原始数据:");
        System.out.println(Strjson.toString());
    }

}

时间: 2024-11-05 21:58:24

服务端提供的JSON数据接口与用户端接收解析JSON数据的相关文章

samba之linux作为服务端提供文件共享服务

准备2台centos7,一台作为服务端,一台作为客户端客户端安装软件samba-client,cifs-utils安装服务端软件sambayum install samba -y通过rpm -ql samba找到下面两个核心服务,第一个为名字解析服务,第二个为主要服务/usr/lib/systemd/system/nmb.service/usr/lib/systemd/system/smb.service配置文件路径/etc/samba/smb.conf启动服务systemctl start s

终端、网络到服务端(一)从日常vps云服务器的管理看数据包的传输

从日常vps云服务器的管理看数据包的传输 无论从app移动端,还是pc设备,总要通过接入,通过网络传输到服务端进行数据握手和各类交互,那么从这个角度出发,就可以看到各种终端设备发出的网络请求,最终还是要特定方式连接上服务端的.以vps服务器管理来说,一般vps idc都提供2种接入方式:远程桌面和web接入: 1 远程接入走的是应用层,发送的是segment段地址信息,通过tcp/ip协议的3次握手建立连接,出现远程桌面的登录界面. 2 web登录,一般都是由idc提供一个web管理界面,在会员

通过Json和Gson,快速生成和解析json字符串

1,首先我们要先明白json与gson有什么区别 其实他们是完全不同的概念: json是一种数据格式,便于数据传输,存储,交换. gson则是一种组件库,就是通过Gson我们可以把java中的对象(gson.toJson()),转换成Json字符串,当然反过来也是可以的(gson.fromJson); 2,代码 首先我们需要JSon和Gson这两个jar包 package com.json.dome; import java.util.ArrayList;import java.util.Lis

使用javascript把图片转成base64位编码,然后传送到服务端(ajax调用的接口基于drupa7)

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src='http://code.jquery.com/jquery-1.9.1.min.js'></script> <script src='jquery.base64.js'><

android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据

补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访问的IP都是10.0.2.2,如果在apache虚拟主机配置文件中配置了多个虚拟主机,那么将默认解析为对第一个虚拟主机的请求,所以,在调试android应用时,应该将对应的服务端所配置的那个虚拟主机放在配置文件中的第一个虚拟主机的位置.否则就会出现请求的文件不存在等的错误. 服务端返回JSON数据及

Android-搭建简单服务端+ListView异步加载数据

Android-搭建简单服务端+ListView异步加载数据 2014年5月6日 本篇博文带给大家的是教大家如何在MyEclipse中搭建一个服务端,并通过手机端与其通信,异步加载数据. 笔者使用的是MyEclipse,各位也可以直接用Eclipse创建Java Web项目,谷歌提供的ADT Bundle是不能创建Web项目,读者可以下载Eclipse For JaveEE Developer这个IDE. 下面来介绍如何在MyEclipse创建一个Web项目,并部署到Tomcat当中,关于Tom

了解如何设计和开发基于Http请求的数据接口服务系统

如今互联网的蓬勃发展离不开Http这个应用层面上的网络通信协议的诞生和发展,在经历着信息技术时代,到现在"数据时代"一词屡见不鲜之后,可以洞悉数据在影响着我们生活,昨晚在下载百度地图的离线数据包就发现,广州市的离线数据包明显大于全国其它市区不少. 数据作为一种服务已成常态,比如:12306火车票查询数据接口,商标信息服务接口,甚至车辆违章高发路段数据接口,这些数据来自各行各业并且通过数据接口服务提供给更多需要的人或信息系统. 本文主要介绍如何设计和开发数据接口服务系统,主要涉及到数据接

高效率完成一次接入80个手游渠道SDK——游戏接入SDK服务端篇

1 概要    通常,游戏开发商并不会只在一个渠道上线他们的游戏,接入越多的渠道,代表着可能获取越多的用户,但同时也代表着越多的接入SDK工作量.工期和费用.一款游戏要有足够的用户,甚至需要接入30家以上的各种渠道,以保障自己的市场覆盖率. 单个SDK接入流程在一位有经验的全职客户端程序.一位全职服务端程序员.一位全职QA处理的情况下,需要3天时间才能完成.因此当一款产品面对30个甚至更多不同需求的渠道SDK时,人员成本和时间成本就会急剧增加.所以我们需要一个通用接口,来处理各种渠道的需求,这就

服务端测试之接口测试初探

提起服务端测试,第一反应想到的可能就是http协议.socket连接.post/get发送请求等等.回想起小编当时初次接触服务端测试,真可谓一脸懵逼,不知道要干什么也不知道从哪儿开始做.服务端测试往往呈现给大家的是一个很大很宽泛的任务,我们知道要做服务端测试但却不知道怎么做,流程是啥,用什么工具去做,要达到什么样的效果.今天小编就结合最近自己做的一些服务端测试的任务,和大家聊聊服务端测试中的一个常见方法--接口测试. 一.什么是接口测试 先来看看接口测试的定义: 接口测试是测试系统组件间接口的一