JS和JAVA使用JSON方法解析

JS和JAVA使用JSON方法解析

一.JS部分==================

将json字符串转换为json对象的方法。在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。

例如:

JSON字符串:

var str1 = '{ "name": "cxh", "sex": "man" }';

JSON对象:

var str2 = { "name": "cxh", "sex": "man" };

一、JSON字符串转换为JSON对象

要使用上面的str1,必须使用下面的方法先转化为JSON对象:

//由JSON字符串转换为JSON对象
var obj = eval('(' + str + ')');

或者

//由JSON字符串转换为JSON对象
var obj = str.parseJSON(); 

或者

//由JSON字符串转换为JSON对象
var obj = JSON.parse(str); 

然后,就可以这样读取:

Alert(obj.name);

Alert(obj.sex);

特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)。

二、可以使用toJSONString()或者全局方法JSON.stringify()将JSON对象转化为JSON字符串。

例如:

//将JSON对象转化为JSON字符
var last=obj.toJSONString(); 

或者

//将JSON对象转化为JSON字符
var last=JSON.stringify(obj); 

alert(last);

注意:

上面的几个方法中,除了eval()函数是js自带的之外,其他的几个方法都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个方法都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()方法,则说明您的json包版本太低。

二.JAVA部分===============

1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, java arrays and XML等转换成JSON,或者反向转换的功能。

2. json-lib 主页 : http://json-lib.sourceforge.net/

3.执行环境

需要以下类库支持(Maven构建)

    pom.xml
    <dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
    </dependency>

下表中是Java与JavaScript类型对应关系。

代码示例:

注:在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误

JavaBean代码:

package com.ppl.jsonconvert;

public class Student {//姓名
	private String name;
	//年龄
	private String age;
	//住址
	private String address;

	//在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误
	public Student() {
		super();
	}
	public Student(String name, String age, String address) {
		super();
		this.name = name;
		this.age = age;
		this.address = address;
	}
	public String getName() {
	return name;
	}
	public void setName(String name) {
	this.name = name;
	}
	public String getAge() {
	return age;
	}
	public void setAge(String age) {
	this.age = age;
	}
	public String getAddress() {
	return address;
	}
	public void setAddress(String address) {
	this.address = address;
	}
	@Override
	public String toString() {
	return "Student [name=" + name + ", age=" + age + ", address="
	+ address + "]";
	}
	}

提供两个工具类,json转换map的实现方法,有点儿简单,应付简单的需求没问题

/***
	 * 将json格式的字符串解析成Map对象
	 * @param object
	 *   JSON字符串
	 * @return Map集合
	 */
   public static Map<String, String> toHashMap(Object object)
   {
   	LinkedHashMap<String, String> dataMap = new LinkedHashMap<String, String>();
       // 将json字符串转换成jsonObject
       JSONObject jsonObject = JSONObject.fromObject(object);
       Iterator it = jsonObject.keys();
       // 遍历jsonObject数据,添加到Map对象
       while (it.hasNext())
       {
           String key = String.valueOf(it.next());
           String value = (String) jsonObject.get(key);
           dataMap.put(key, value);
       }
       return dataMap;
   }
	  /**
	    *
	   * json转换map.
	   * <br>详细说明
	   * @param jsonStr json字符串
	   * @return
	   * @return Map<String,Object> 集合
	   * @throws
	   * @author slj
	    */
	    public static Map<String, Object> parseJSON2Map(String jsonStr){
	        ListOrderedMap map = new ListOrderedMap();
	        //最外层解析
	        JSONObject json = JSONObject.fromObject(jsonStr);
	        for(Object k : json.keySet()){
	            Object v = json.get(k);
	            //如果内层还是数组的话,继续解析
	            if(v instanceof JSONArray){
	                List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
	                Iterator<JSONObject> it = ((JSONArray)v).iterator();
	                while(it.hasNext()){
	                    JSONObject json2 = it.next();
	                    list.add(parseJSON2Map(json2.toString()));
	                }
	                map.put(k.toString(), list);
	            } else {
	                map.put(k.toString(), v);
	            }
	        }
	        return map;
	    }

测试代码:

package com.ppl.jsonconvert;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.ppl.json.commons.JsonUtils;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class Test {

	@SuppressWarnings({ "unused", "rawtypes", "unchecked" })
	public static void main(String[] args) {

		///******************************
		//普通java实体类转化为JSON字符串形式
		///******************************
		Student stu=new Student();
		stu.setName("JSON");
		stu.setAge("23");
		stu.setAddress("北京市西城区");

		//1、使用JSONObject
		JSONObject jsonObject = JSONObject.fromObject(stu);
		String strJson=jsonObject.toString();

		//strJson:{"address":"北京市西城区","age":"23","name":"JSON"}
		System.out.println("strJson:"+strJson);

		//2、使用JSONArray
		JSONArray jsonArray=JSONArray.fromObject(stu);
		String strArray=jsonArray.toString();

		//strArray:[{"address":"北京市西城区","age":"23","name":"JSON"}]
		System.out.println("strArray:"+strArray);
		//////////////////

		///******************************
	    //JSON字符串--》》java对象
		///******************************

		//定义两种不同格式的字符串
		String objectStr="{\"name\":\"JSONStu1\",\"age\":\"18\",\"address\":\"北京市西城区\"}";
		String arrayStr="[{\"name\":\"JSONStu2\",\"age\":\"22\",\"address\":\"济南市历城区\"}]";
		//1、使用JSONObject--将文字列转换为JSON

		JSONObject jsonObject2=JSONObject.fromObject(objectStr);
		Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class);
		System.out.println("stu2:"+stu2);

		//2、使用JSONArray--将文字列转换为JSON
		JSONArray jsonArray2=JSONArray.fromObject(arrayStr);
		//获得jsonArray的第一个元素
		Object o=jsonArray2.get(0);
		JSONObject jsonObject3=JSONObject.fromObject(o);
		Student stu3=(Student)JSONObject.toBean(jsonObject3, Student.class);

		System.out.println("stu3:"+stu3);

		///******************************
		//Map转换成json, 大多使用jsonObject(注1)
		///******************************
		//不建议使用出自于 org.apache.commons.collections.OrderedMap
		//Map<String, Integer> ordermap = (Map<String, Integer>)new ListOrderedMap();
		//有序的Map
		Map ordermap = new LinkedHashMap<String, String>();

		Map map = new HashMap<String,Object>();
        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 jsonObjectMap = JSONObject.fromObject( map );
        System.out.println( "Map转换成json:"+jsonObjectMap );  

        //注1示例详解
        Student stu4=new Student("JSON","28","上海");

        Map<String,Student> map4=new HashMap<String,Student>();
        map4.put("first", stu4);
        //1、JSONObject
        JSONObject mapObject=JSONObject.fromObject(map4);
        System.out.println("mapObject"+mapObject.toString());
        //2、JSONArray
        JSONArray mapArray=JSONArray.fromObject(map4);
        System.out.println("mapArray:"+mapArray.toString());

      ///******************************
      //list--》》json字符串,使用JSONArray
      ///******************************
        Student stu5=new Student("student1","16","jinan");
        Student stu6=new Student("student2","26","qingdao");
        List<Student> lists=new ArrayList<Student>();
        lists.add(stu5);
        lists.add(stu6);
        //1、 使用JSONArray
        JSONArray listArray=JSONArray.fromObject(lists);

        System.out.println("listArray:"+listArray.toString());

      ///******************************
        //json字符串--》》list
        ///******************************
        String arrayStr2="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"济南高新区\"}]";
      //转化为list
      List<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr2), Student.class);
      for (Student stus : list2) {
          System.out.println(stus);
          }

      //最新的方法json字符串--》》list
      JSONArray jsonArrayT = JSONArray.fromObject(arrayStr2);
      List<Student> listData = (List) JSONArray.toCollection(jsonArrayT, Student.class);
      for (Student stus : listData) {
          System.out.println("listData: "+stus);
          }
      //转化为数组
      Student[] ss =(Student[])JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class);
      for (Student student : ss) {
      System.out.println(student);

      }

    ///******************************
      //json字符串--》》Map
      ///******************************

      //BUG___________________TODO----------BUG
      String strObject="{\"KEY\":{\"address\":\"中国上海\",\"age\":\"23\",\"name\":\"JSON\"}}";
      Map<String, String> dataMap = JsonUtils.toHashMap(strObject);
      System.out.println(dataMap.toString());
     }

}
时间: 2024-10-13 23:11:42

JS和JAVA使用JSON方法解析的相关文章

用json方法解析webqq好友列表文本

本节课主要讲解了用json方法解析webqq好友列表文本,并显示在超级列表框里.相信大家看完本节课,会对json格式文本的解析有更深层次的理解. 用json方法解析webqq好友列表文本,布布扣,bubuko.com

js和java 下json字符串的使用和转化

1.在js中将对象转为字符串/json字符串 给初学者的一个提醒,JavaScript是弱类型的语言,是不存在json字符串这种类型的,json字符串也是字符串. 为什么要把对象转化为字符串呢? 因为在前后台的数据交互中,js中的对象肯定是不能被后台的语言直接获取的,我们需要把js的对象转化为json格式的字符串,然后再发给后台的java. json的格式为 {"term1Name":term1Value,"term2Name":term2Name}通过下面的代码就

js与java对json的操作

JSON呢,是现在大部分,并且主流的传递数据的方式. 今天讲一下javascript的java对json的操作 提到js,当下就有一个比较主流的插件,vue.js,这个插件程序员没用过也都听说过吧, 非常方便的一个js插件,像js对于json的操作比如说json的话直接可以点出来,像数据的话 data[0]需要给下标才能点出来, java呢处理json就比较复杂了 import org.json.JSON; 需要导一下包,对于已经toString的字符串 可以使用JSONObject obj =

js实现Java的trim()方法效果

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js实现Java中的String的trim()效果</title> <script type="text/javascript"> function myTrim(str){ //定义字符串开始的索引 var start = 0; //定义字符串结束的索引 var 

用JAVA进行Json数据解析(对象数组的相互嵌套)

这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相关工具美化后的结果 {  "translation": [    "爱"  ],  "basic": {    "us-phonetic": "l?v",    "phonetic": &q

【java】json格式解析

实现一个小功能,都磕磕绊绊.信心全无.感觉又变成死循环,觉得磨刀误砍柴,于是用一把半成品废刀一块一块的削.最后削出的玩意乱七八糟,自己也费了好大劲. 功能是,先从数据库中查询到一串数据,然后要组织成json格式,再返回给jsp,jsp才能显示到前端界面上.可是现在不显示,原因应该是返回的不是json格式,所以前端接口不认识. JSON定义    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成.它基于ECMA2

用json方法解析本地数据,并显示在tableView上面

效果图  图片是三张星星图片,1是全星,2是半星,3是空星 类的文件 AppDelegate.m #import "AppDelegate.h" #import "MainViewController.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOp

java ThreadGroup 作用 方法解析(转)

ThreadGroup线程组,java对这个类的描述呢就是“线程组表示一组线程.此外,线程组还可以包括其他线程组.线程组形成一个树,其中除了初始线程组之外的每个线程组都有一个父线程组.允许线程访问关于其线程组的信息,但不允许访问关于其线程组的父线程组或任何其他线程组的信息.” ThreadGroup并不是算是标注容器,因为,最后你会发现这个家伙是没有public的 add,remove方法的.那怎么把线程放到线程组里面呢?答案是 在new Thread(参数),将ThreadGroup当做参数传

js 将json字符串转换为json对象的方法解析(转)

js 将json字符串转换为json对象的方法解析 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 例如: JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str2 = { "name": &