java中string与json互相转化
在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互相转化的更多相关文章
- java中string和int互相转化
1 怎样将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...
- java中string和int互相转化 (转)
1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...
- Java中String和byte[]间的转换浅析
Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...
- Java中String和byte[]间的 转换浅析
Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...
- Java中String和byte[]间的 转换
数据库的字段中使用了blob类型时,在entity中此字段可以对应为byte[] 类型,保存到数据库中时需要把传入的参数转为byte[]类型,读取的时候再通过将byte[]类型转换为String类型. ...
- java中string内存的相关知识点
(一):区别java内存中堆和栈: 1.栈:数据可以共享,存放基本数据类型和对象的引用,其中对象存放在堆中,对象的引用存放在栈中: 当在一段代码块定义一个变量时,就在栈中 为这个变量分配内存空间,当该 ...
- java中String的相等比较
首先贴出测试用例: package test; import org.junit.Test; /** * Created by Administrator on 2015/9/16. * */ pub ...
- java中String、StringBuffer、StringBuilder的区别
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- Java中String类的方法及说明
String : 字符串类型 一. String sc_sub = new String(c,3,2); // String sb_copy = new String(sb) ...
随机推荐
- 用SqlDataReader返回多个结果集
using System; using System.Data; using System.Data.SqlClient; namespace Northwind { class Program { ...
- 6、DRN-----深度强化学习在新闻推荐上的应用
1.摘要: 提出了一种新的深度强化学习框架的新闻推荐.由于新闻特征和用户喜好的动态特性,在线个性化新闻推荐是一个极具挑战性的问题. 虽然已经提出了一些在线推荐模型来解决新闻推荐的动态特性,但是这些方法 ...
- [HDU5686]2016"百度之星" - 资格赛 Problem B
题目大意:给你n,规定一个串中相邻的两个1可以合并为一个2(别的不行),让你求长度为n的全1串最多能变成多少种不同的串. 解题思路:我们先来找一波规律,发现n=1,2,3,4,5时答案分别为1,2,3 ...
- BZOJ 3129 [SDOI2013]方程 (拓展Lucas)
题目大意:给定一个方程$X_{1}+X_{2}+X_{3}+X_{4}+...+X_{n}=M$,$\forall X_{i}<=A_{i} (i<=n1)$ $\forall X_{i} ...
- svn 验证位置失败 Authorization failed
进入svn的conf目录下 修改svnserve.conf [general] anon-access = none #未登录用户不允许访问 auth-access = write passwor ...
- 浅说套接字socket做个小小的监控
socket 的简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket的英文原义是"孔"或"插座".作为 ...
- mac同时享受教育优惠和免手续费分期
神奇地址:工商银行 http://store.apple.com/cn_icbc_edu招商银行 http://store.apple.com/cn_cmb_edu农业银行 http://sto ...
- Edward Frenkel关于几何化朗兰兹纲领的采访
本文来自:菲尔兹奖座谈会 博客 Edward Frenkel教授的主要研究方向是数学与量子物理中的对称.他现在在做的许多问题都与朗兰兹纲领有关.他现在是加州大学伯克利分校的数学教授. 在今年的菲尔兹奖 ...
- ASP.NET-缓存outputcache参数
给Index加一个60秒的缓存,应该缓存在IIS服务器里面(我猜的) 只对变化的参数page不进行缓存,其他参数返回相同的内容 根据接受的语言的不同不进行缓存 设定缓存的位置 依赖于数据库变化的缓存 ...
- rpm -qf 的使用技巧,以及怎样查找软件包
首先查看安装的软件包,或者时候安装有某某软件包的命令 rpm (-qa)| grep 软件名 root@mode oldboy]# rpm -qa| grep openssl openssl-dev ...