在Java中socket数据传输时,数据类型往往比較难选择。可能要考虑带宽、跨语言、版本号的兼容等问题。

比較常见的做法有两种:一是把对象包装成JSON字符串传输,二是採用java对象的序列化和反序列化。

随着Google工具protoBuf的开源。protobuf也是个不错的选择。对JSON,Object
Serialize,ProtoBuf 做个对照。

1、string转json

有三种方法

第一种:string直接转json

String json = "{\"2\":\"efg\",\"1\":\"abc\"}";   JSONObject json_test = JSONObject.fromObject(json);   将string的双引號转义就可以。适用于字符串较短的

另外一种:将string转为list后转为json

List<String> list = new ArrayList<String>();  list.add("username");  list.add("age");  list.add("sex");  JSONArray array = new JSONArray();  array.add(list);

能够使用list的add函数将须要的字符串拼接就可以,可是这个仅仅能使用jsonarry

第三种:将string转为map后转为json

Map<String, String> map = new HashMap<String, String>();

        map.put("1", "abc");

map.put("2", "efg");

JSONArray array_test = new JSONArray();

array_test.add(map);

    JSONObject jsonObject = JSONObject.fromObject(map);

这里使用map就能够将字符串转化为JSONArray或者JSONObject都能够。可是这里的键不能使用int型

1、json转string

先构造json:JSONObject string_to_json = JSONObject.fromObject("{\"data\": {\"pages\": [ {\"comment\": \"just for test\"},{\"comment\": \"just for test\"}],\"total_count\": 2 },\"errcode\": 0}");

对于JSONObject而言就能够直接使用

JSONObject json_to_data = string_to_json.getJSONObject("data");就可以

对于JSONArray而言就能够使用这两种

第一种:JSONArray json_to_strings = json_to_data.getJSONArray("pages");//先将JSONObject里包括的JSONArray取出

    for (Object object : json_to_strings) {//循环读取就可以

     JSONObject json_to_string = JSONObject.fromObject(object);

      json_to_string.get("pages");

    }

另外一种:JSONArray json_to_strings_test = json_to_data1.getJSONArray("pages");//先将JSONObject里包括的JSONArray取出

    for (int i = 0; i < json_to_strings_test.size(); i++) {//循环读取就可以

      JSONObject json_to_string1 = json_to_strings_test.getJSONObject(i);

    }

上面所有程序的測试如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

以下贴出代码:

//string构筑json

String json = "{\"2\":\"efg\",\"1\":\"abc\"}";

JSONObject json_test = JSONObject.fromObject(json);  

    System.out.print("json_test:"+json_test);

    System.out.print("\n");

//使用list构筑json(list仅仅能使用JSONArray)

List<String> list = new ArrayList<String>();

        list.add("username");

        list.add("age");

        list.add("sex");

        JSONArray array = new JSONArray();

        array.add(list);

        System.out.print("array:"+array);

    System.out.print("\n");

        //初始化HashMap集合并加入数组(json必须键不能是int类型)

        Map<String, String> map = new HashMap<String, String>();

        map.put("1", "abc");

map.put("2", "efg");

JSONArray array_test = new JSONArray();

array_test.add(map);

        System.out.print("array_test:"+array_test);

    System.out.print("\n");

    JSONObject jsonObject = JSONObject.fromObject(map);  

    System.out.print("jsonObject:"+jsonObject);

    System.out.print("\n");

    //解析json

    JSONObject string_to_json = JSONObject.fromObject("{\"data\": {\"pages\": [ {\"comment\": \"just for test1\"},{\"comment\": \"just for test2\"}],\"total_count\": 2 },\"errcode\": 0}");

    JSONObject json_to_data = string_to_json.getJSONObject("data");

    JSONArray json_to_strings = json_to_data.getJSONArray("pages");

    for (Object object : json_to_strings) {

     JSONObject json_to_string = JSONObject.fromObject(object);

     json_to_string.get("pages");

     System.out.print("json_to_string.get(\"pages\"):"+json_to_string.get("comment"));

     System.out.print("\n");

    } 

    JSONObject json_to_data1 = string_to_json.getJSONObject("data");

    JSONArray json_to_strings_test = json_to_data1.getJSONArray("pages");

    for (int i = 0; i < json_to_strings_test.size(); i++) {

      JSONObject json_to_string1 = json_to_strings_test.getJSONObject(i);

      System.out.print("json_to_string1.get(\"pages\"):"+json_to_string1.get("comment"));

      System.out.print("\n");

    }

有新的好的方法希望可以讨论

java中string与json互相转化的更多相关文章

  1. java中string和int互相转化

    1 怎样将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...

  2. java中string和int互相转化 (转)

    1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...

  3. Java中String和byte[]间的转换浅析

    Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...

  4. Java中String和byte[]间的 转换浅析

    Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...

  5. Java中String和byte[]间的 转换

    数据库的字段中使用了blob类型时,在entity中此字段可以对应为byte[] 类型,保存到数据库中时需要把传入的参数转为byte[]类型,读取的时候再通过将byte[]类型转换为String类型. ...

  6. java中string内存的相关知识点

    (一):区别java内存中堆和栈: 1.栈:数据可以共享,存放基本数据类型和对象的引用,其中对象存放在堆中,对象的引用存放在栈中: 当在一段代码块定义一个变量时,就在栈中 为这个变量分配内存空间,当该 ...

  7. java中String的相等比较

    首先贴出测试用例: package test; import org.junit.Test; /** * Created by Administrator on 2015/9/16. * */ pub ...

  8. java中String、StringBuffer、StringBuilder的区别

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  9. Java中String类的方法及说明

    String : 字符串类型 一.      String sc_sub = new String(c,3,2);    //      String sb_copy = new String(sb) ...

随机推荐

  1. dede内链怎么优化,Dedecms内部链接优化技巧

    dede内链怎么优化,dedecms内部链接优化技巧 使用dedecms的过程中发现,可以通过dedecms的文档关键词维护功能.发表文章时候的关键词添加功能(也可以自动获取)以及核心设置里面的是否使 ...

  2. 二进制与十进制的转化,bool str int 之间的转化,str的常用操作,

    1.基础数据类型总览(7种) int: 整型,用于进行+-*/运算 str: 存储少量的数据;可加str,可乘数字,可切片,可进行9种常用操作 bool: True False 判断真假 list: ...

  3. 小程序canvas生成二维码图片踩的坑

    1:生成临时图片,保证画布被加载以及渲染(即本身不可以 hidden 或是 上级元素不可以 hidden 或是 wx:if 隐藏等) == > 建议:因为 canvas 的组件层级(z-inde ...

  4. python 面向对象 继承

    什么是继承 继承表达的是一种”是“的关系,比如人是动物 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 继承是基于抽象的结 ...

  5. Fastlane基础介绍

    Fastlane是什么 Git地址: Fastlane 文档地址:Fastlane Document Fastlane是一整套的客户端CICD工具集合.Fastlane可以非常快速简单的搭建一个自动化 ...

  6. matlab 中语句 a(b)的意思

    a=[1 2; 3, 4; 5, 6]; b=[1 3 2 1; 1 2 4 2]; c=a(b) c =                 1     5     3     1 1     3   ...

  7. 用Maven+IDEA+Eclipse组合获得最好的OpenJML体验

    OpenJML+SMTSolver的形式化验证想必大家都已经尝试过了.大家或许体验的更多的是IDEA上命令行输出版本的OpenJML插件,但真正得到官方支持的完全版OpenJML是它的Eclipse版 ...

  8. Win7+VS2010:mysql 源代码编译与调试

    win7+vs2010源代码编译mysql 近期因为在实习,工作重点在于一些数据库的开发,为了更好的理解数据库的实现机制.眼下萌生了要研究一下mysql数据库源代码的想法.那么好吧,说干就干.首先我们 ...

  9. 4.有关日期格式属性改动常识,v$nls_parameters,between and,查询指定部门的员工信息,in和null,like模糊查询,order by后面能够跟:列名、表达式、别名、序号

     1 有关日期格式属性改动常识 NLS_DATE_FORMAT           DD-MON-RR select sysdate from dual; NLS_CURRENCY         ...

  10. QTP11.5公布,改名UFT

    QTP11.5公布,改名UFT,支持多脚本编辑调试.PDF检查点.持续集成系统.手机測试等 http://www.learnqtp.com/hp-uft11-5-qtp-new-features/ T ...