java定义一个json字符串,java生成json字符串
java如何创建Json文件?
如果聊天数据的结构是固定的或变化不大的。
就直接“编排”json字符串。
为要输出的对象增加一个String toJSON()方法
StringBuilder b=new StringBuilder();
b.append("{ name:\"");
b.append(username);
b.append("\"}");
依次类推
return b.toString();
适合绝大多数情况。
补充:json是做交换格式,查询效率非常低,如果做存储的检索格式就误用了。
就是说“聊天信息的保存用json应该可以吧”还不如你之前的mysql数据库。
json用在客户端往服务端发送的通讯交换数据的格式上。服务端收到后转为数据库中或内存中存放。
怎样用java解析一个json字符串
public static void main(String[] args){
String temp="{'data':{'a':[{'b1':'bb1','c1':'cc1'},{'b2':'bb2','c2':'cc2'}]}}";
JSONObject jodata =JSONObject.fromObject(temp);
JSONObject joa =JSONObject.fromObject(jodata.get("data").toString());
JSONArray ja=JSONArray.fromObject(joa.get("a"));
for(int i=0;ija.size();i++){
JSONObject o=ja.getJSONObject(i);
if(o.get("b1")!=null){
System.out.println(o.get("b1"));
}
if(o.get("c1")!=null){
System.out.println(o.get("c1"));
}
if(o.get("b2")!=null){
System.out.println(o.get("b2"));
}
if(o.get("c2")!=null){
System.out.println(o.get("c2"));
}
}
}
注:要包含两个jar包ezmorph-1.0.6.jar和json-lib-2.2.2-jdk15.jar,jar包在附件中
java解析json字符串数据
这个需要导入个jar包的,自己写太麻烦,而且要考虑特殊字符的转义的。
1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, java arrays and XML等转换成JSON,或者反向转换的功能。
2. json-lib 主页 :?
3.执行环境
需要以下类库支持
jakarta commons-lang 2.5
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6
4.功能示例
这里通过JUnit-Case例子给出代码示例
??
package?com.mai.json;
import?static?org.junit.Assert.assertEquals;
import?java.util.ArrayList;
import?java.util.Date;
import?java.util.HashMap;
import?java.util.Iterator;
import?java.util.List;
import?java.util.Map;
import?net.sf.ezmorph.Morpher;
import?net.sf.ezmorph.MorpherRegistry;
import?net.sf.ezmorph.bean.BeanMorpher;
import?net.sf.json.JSONArray;
import?net.sf.json.JSONObject;
import?net.sf.json.util.JSONUtils;
import?org.apache.commons.beanutils.PropertyUtils;
import?org.junit.Test;
public?class?JsonLibTest?{
????/*
?????*??普通类型、List、Collection等都是用JSONArray解析
?????*??
?????*??Map、自定义类型是用JSONObject解析
?????*??可以将Map理解成一个对象,里面的key/value对可以理解成对象的属性/属性值
?????*??即{key1:value1,key2,value2......}
?????*?
?????*?1.JSONObject是一个name:values集合,通过它的get(key)方法取得的是key后对应的value部分(字符串)
?????*?????????通过它的getJSONObject(key)可以取到一个JSONObject,--?转换成map,
?????*?????????通过它的getJSONArray(key)?可以取到一个JSONArray?,
?????*?
?????*?
?????*/
????
????//一般数组转换成JSON
????@Test
????public?void?testArrayToJSON(){
????????boolean[]?boolArray?=?new?boolean[]{true,false,true};??
????????JSONArray?jsonArray?=?JSONArray.fromObject(?boolArray?);??
????????System.out.println(?jsonArray?);??
????????//?prints?[true,false,true]??
????}
????
????
????//Collection对象转换成JSON
????@Test
????public?void?testListToJSON(){
????????List?list?=?new?ArrayList();??
????????list.add(?"first"?);??
????????list.add(?"second"?);??
????????JSONArray?jsonArray?=?JSONArray.fromObject(?list?);??
????????System.out.println(?jsonArray?);??
????????//?prints?["first","second"]??
????}
????
????
????//字符串json转换成json,?根据情况是用JSONArray或JSONObject
????@Test
????public?void?testJsonStrToJSON(){
????????JSONArray?jsonArray?=?JSONArray.fromObject(?"['json','is','easy']"?);??
????????System.out.println(?jsonArray?);??
????????//?prints?["json","is","easy"]??
????}
????
????
????//Map转换成json,?是用jsonObject
????@Test
????public?void?testMapToJSON(){
????????Map?map?=?new?HashMap();??
????????map.put(?"name",?"json"?);??
????????map.put(?"bool",?Boolean.TRUE?);??
????????map.put(?"int",?new?Integer(1)?);??
????????map.put(?"arr",?new?String[]{"a","b"}?);??
????????map.put(?"func",?"function(i){?return?this.arr[i];?}"?);??
??????????
????????JSONObject?jsonObject?=?JSONObject.fromObject(?map?);??
????????System.out.println(?jsonObject?);??
????}
????
????//复合类型bean转成成json
????@Test
????public?void?testBeadToJSON(){
????????MyBean?bean?=?new?MyBean();
????????bean.setId("001");
????????bean.setName("银行卡");
????????bean.setDate(new?Date());
????????
????????List?cardNum?=?new?ArrayList();
????????cardNum.add("农行");
????????cardNum.add("工行");
????????cardNum.add("建行");
????????cardNum.add(new?Person("test"));
????????
????????bean.setCardNum(cardNum);
????????
????????JSONObject?jsonObject?=?JSONObject.fromObject(bean);
????????System.out.println(jsonObject);
????????
????}
????
????//普通类型的json转换成对象
????@Test
????public?void?testJSONToObject()?throws?Exception{
????????String?json?=?"{name=\"json\",bool:true,int:1,double:2.2,func:function(a){?return?a;?},array:[1,2]}";??
????????JSONObject?jsonObject?=?JSONObject.fromObject(?json?);?
????????System.out.println(jsonObject);
????????Object?bean?=?JSONObject.toBean(?jsonObject?);?
????????assertEquals(?jsonObject.get(?"name"?),?PropertyUtils.getProperty(?bean,?"name"?)?);??
????????assertEquals(?jsonObject.get(?"bool"?),?PropertyUtils.getProperty(?bean,?"bool"?)?);??
????????assertEquals(?jsonObject.get(?"int"?),?PropertyUtils.getProperty(?bean,?"int"?)?);??
????????assertEquals(?jsonObject.get(?"double"?),?PropertyUtils.getProperty(?bean,?"double"?)?);??
????????assertEquals(?jsonObject.get(?"func"?),?PropertyUtils.getProperty(?bean,?"func"?)?);??
????????System.out.println(PropertyUtils.getProperty(bean,?"name"));
????????System.out.println(PropertyUtils.getProperty(bean,?"bool"));
????????System.out.println(PropertyUtils.getProperty(bean,?"int"));
????????System.out.println(PropertyUtils.getProperty(bean,?"double"));
????????System.out.println(PropertyUtils.getProperty(bean,?"func"));
????????System.out.println(PropertyUtils.getProperty(bean,?"array"));
????????
????????List?arrayList?=?(List)JSONArray.toCollection(jsonObject.getJSONArray("array"));
????????for(Object?object?:?arrayList){
????????????System.out.println(object);
????????}
????????
????}
????
????
????//将json解析成复合类型对象,?包含List
????@Test
????public?void?testJSONToBeanHavaList(){
????????String?json?=?"{list:[{name:'test1'},{name:'test2'}],map:{test1:{name:'test1'},test2:{name:'test2'}}}";
//????????String?json?=?"{list:[{name:'test1'},{name:'test2'}]}";
????????Map?classMap?=?new?HashMap();
????????classMap.put("list",?Person.class);
????????MyBeanWithPerson?diyBean?=?(MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class?,?classMap);
????????System.out.println(diyBean);
????????
????????List?list?=?diyBean.getList();
????????for(Object?o?:?list){
????????????if(o?instanceof?Person){
????????????????Person?p?=?(Person)o;
????????????????System.out.println(p.getName());
????????????}
????????}
????}
????
????
????//将json解析成复合类型对象,?包含Map
????@Test
????public?void?testJSONToBeanHavaMap(){
????????//把Map看成一个对象
????????String?json?=?"{list:[{name:'test1'},{name:'test2'}],map:{testOne:{name:'test1'},testTwo:{name:'test2'}}}";
????????Map?classMap?=?new?HashMap();
????????classMap.put("list",?Person.class);
????????classMap.put("map",?Map.class);
????????//使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析
????????MyBeanWithPerson?diyBean?=?(MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class?,?classMap);
????????System.out.println(diyBean);
????????
????????System.out.println("do?the?list?release");
????????ListPerson?list?=?diyBean.getList();
????????for(Person?o?:?list){
????????????Person?p?=?(Person)o;
????????????System.out.println(p.getName());
????????}
????????
????????System.out.println("do?the?map?release");
????????
????????//先往注册器中注册变换器,需要用到ezmorph包中的类
????????MorpherRegistry?morpherRegistry?=?JSONUtils.getMorpherRegistry();
????????Morpher?dynaMorpher?=?new?BeanMorpher(?Person.class,??morpherRegistry);??
????????morpherRegistry.registerMorpher(?dynaMorpher?);??
????????
????????
????????Map?map?=?diyBean.getMap();
????????/*这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象*/
????????System.out.println(map);
/*输出:
{testOne=net.sf.ezmorph.bean.MorphDynaBean@f73c1[
??{name=test1}
],?testTwo=net.sf.ezmorph.bean.MorphDynaBean@186c6b2[
??{name=test2}
]}
*/
????????ListPerson?output?=?new?ArrayList();??
????????for(?Iterator?i?=?map.values().iterator();?i.hasNext();?){??
????????????//使用注册器对指定DynaBean进行对象变换
???????????output.add(?(Person)morpherRegistry.morph(?Person.class,?i.next()?)?);??
????????}??
????????
????????for(Person?p?:?output){
????????????System.out.println(p.getName());
/*输出:
test1
test2
*/
????????}
????????
????}
????
????
????
}
java 怎么把数据json字符串
Java可以使用? fastjson、gson、Jackson或是其他类似的工具将Java对象转成json字符串(同时也可以将json格式转换成java对象)
demo: 将fastjson? jar包添加绑定到项目后,需要转换的地方使用如下代码
User?user?=?(User)?JSONObject.parse(jsonStr);?//?json?to?java
String?jsonStr?=?JSONObject.toJSONString(javaObject);?//?java?to?json