Java读取json数组转化成List或Object数组

在之前的开发中经常遇到将List或Array转换成json传递到web前端,

供前端显示,但是今天我遇到了一个需要将json数组传递到后台,并在后

台转换成list的问题。为此我花费了一段较长的时间,为此我写下这篇博客。

首先是在前端用js构造json数组,html代码如下:

<TABLE style="width: 900px" id="table">
<pre name="code" class="html">    <tr id="trHtml">
	<td class="tdlabel" nowrap="nowrap"><label><ju:txt value="虚拟账号" />:</label></TD>
	<TD><input type="text" id="payAccNo"  name="payAccNo" vui-name="payAccNo" style="width:100px;" autocomplete="off"/></TD>
	<td class="tdlabel" nowrap="nowrap"><label><ju:txt value="科目号" />:</label></TD>
	<TD>
	<input type="text" id="glCode"  name="glCode" vui-name="glCode" style="width:100px;" autocomplete="off"/>
	</TD>
	<td class="tdlabel" nowrap="nowrap"><label><ju:txt value="货币类型" /><span style="color:red;"> *</span>:</label></TD>
	<TD>
	<select id="ccy" name="ccy" class="ccy" style="width:80px;text-align: center;"  vui-name="ccy"  vui-validate="required:true" >
	</select>
	<TD/>
	<td class="tdlabel" nowrap="nowrap"><label><ju:txt value="金额" /><span style="color:red;"> *</span>:</label></TD>
	<TD>
	<input type="text" id="amount" name="amount" style="width:80px;"  vui-name="amount"  vui-validate="required:true,type:number" />
	<TD/>
	<td class="tdlabel" nowrap="nowrap"><label><ju:txt value="摘要"/><span style="color:red;"> *</span>:</label></TD>
	<TD>
	<textarea id="remark" name="remark" style="width:200px;"  vui-name="remark"  vui-validate="required:true,maxlen:20"> </textarea>
	<TD/>
	<TD style="padding-left:35px;">
	<img id="create" src="img/create.png" style="margin-right:10px"/>
	<TD/>
	<TD style="padding-left:15px;">
	<img id="delete"  src="img/delete.png"/>
	<TD/>
   </tr>
</TABLE>

在需求中需要动态添加和删除tr中的内容以增加一行输入项,为此有如下js代码:

//绑定添加
			addHTML="<tr>"+$("#trHtml").html()+"</tr>";
			$("#handworkAccountForm").find($("#create")).each(function(){
				$("#create").die("click");
				$("#create").live("click",function(){
					$("#table").append(addHTML);
					$(".ccy:last").html(modelsHTML);
				});
			});
//
			//绑定删除
			$("#handworkAccountForm").find($("#delete")).each(function(){
				$("#delete").live("click",function(){
					if($("#table tr").length==1){
						return
					}
					$(this).parent().parent().remove();
				});
			});

其中addHTML是select中的option项,是用ajax从后台load出来的,此处忽略。

其次,需要用js获取个tr项中的输入,构造成json数组,代码如下:

var saveHandworkAccount = function() {
			var jsonData={"resourceID":"2020004"};
			var handworkAccountList=new Array;
			var jsonStr="";
			$("#table tr td input,select,textarea").each(function(i){
				var name=$(this).attr("name");
				var value=$(this).val();
				jsonStr=jsonStr+"\""+name+"\":"+"\""+value+"\""+",";
				if(i%4==0&i!=0){
					jsonStr="{"+jsonStr.substring(0,jsonStr.length-1)+"}";
					var a=jQuery.parseJSON(jsonStr);
					handworkAccountList.push(a);
					jsonStr="";
				}
			});
			jsonData["handworkAccountList"]=JSON.stringify(handworkAccountList);
			$.vAjax({
				url : "handworkAccountProcess.json",
				data : jsonData,
				dataType:"json",
				success : function(data) {
					if(data.errorMsg){
						alert(data.errorMsg);
						return;
					}
					if(data.info){
						alert(data.info);
						location.reload();
					}else{
						alert("操作失败");
					}
				},
				error : function(jqXhr, textStatus, error) {
					alert("加载页面失败!");
				}
			});
		};

构造出来的json格式如下:

{
    "handworkAccountList": [
        {
            "payAccNo": "122",
            "glCode": "333",
            "ccy": "CNY",
            "amount": "44",
            "remark": " 5555"
        },
        {
            "payAccNo": "5555",
            "glCode": "6666",
            "ccy": "CNY",
            "amount": "888"
        }
    ],
    "resourceID": 2020004
}

最后是后台获取,代码如下:

public void addHandworkAccount(Context context) {
        logger.debug("Start addHandworkAccount...");
        Map<String, Object> request = this.getRequestData();
        Map<String, Object> response = this.getResponseData();
        Object handworkAccountList = request.get("handworkAccountList");
        String json = handworkAccountList.toString();
        JSONArray array = JSONArray.fromObject(json);
        List<HandworkAccountDto>  dtoList=new ArrayList<HandworkAccountDto>();
        for (int i = 0; i < array.size(); i++) {
            JSONObject jsonObject = array.getJSONObject(i);
            dtoList.add((HandworkAccountDto) JSONObject.toBean(jsonObject, HandworkAccountDto.class));
        }
        logger.debug("addHandworkAccount success...");
    }

其中List<HandworkAccountDto> 也可以是Object数组,HandworkAccountDto

是数据传输对象,用来封装前端传递的参数,代码如下:

public class HandworkAccountDto implements Serializable {

    protected String payAccNo;
    protected String glCode;
    protected String ccy;
    protected BigDecimal amount;
    protected String remark;

    //....省略get,set方法
}

至此,Java读取json数组转化成List或Object数组的案例完成。

时间: 2024-10-09 14:05:32

Java读取json数组转化成List或Object数组的相关文章

Java 读取 Json格式的 内容

一.Json 报文格式如下: 二.获取 Json 报文中字段的内容 1 import java.io.IOException; 2 import com.fasterxml.jackson.core.JsonProcessingException; 3 import com.fasterxml.jackson.databind.JsonNode; 4 import com.fasterxml.jackson.databind.ObjectMapper; 5 6 public class Read

java读取json文件的函数

public String ReadFile(String Path) { BufferedReader reader = null; String laststr = ""; try { FileInputStream fileInputStream = new FileInputStream(Path); InputStreamReader inputStreamReader = new InputStreamReader( fileInputStream, "utf-8

Java解析(读取)Json数据

以前看过书上说,XML是web service间传输信息的标准格式吧,就看了看XML.最近在做个网站,又说是有了JSON,第一回听说就看了看,总结总结一下. 1.JSON介绍 JSON比XML简单,主要体现在传输相同信息的情况下,文件的大小不同. JSON只用于传输信息,XML还可以用于配置文件的使用. JSON中的符号主要有: " , [ {: 2.JSON中的数组和对象 2.1数组(JSONArray) 数组用一对[],表示存放的是一般的数组数据. 如:["11",&qu

Java读取Excel转换成JSON字符串进而转换成Java对象

Jar包 Excel数据 Java代码 package ExcelToJSON; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import java.io.File; public class Excel { public static void main(String[] args) { Sheet she

JSON转换为数组 但读取JSON的顺序目前没法保证

var json = {a : 1, b : 2, c: 3}; var jsonArr = []; for (i in json){ var wrap = []; wrap[0] = i; wrap[1] = json[i]; jsonArr.push(wrap); } JSON转换为数组 但读取JSON的顺序目前没法保证

解决:java 读取 resources 下面的 json 文件

前言:java 读取 工程下的配置文件,文件类型为 json(*.json),记录一下始终读取不到 json 文件的坑.maven项目 直接上工具类代码 package com.yule.component.dbcomponent.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ResourceUtils; import java.io.*; /** *

八、Delphi10.3读取JSON文件,并修改JSON数组一条内容后保存到文件

一.我们有一个JSON文件,如下: { "在野": [ { "城池": 0, "武将": 74, "登场年": 190 }, { "城池": 0, "武将": 11, "登场年": 208 }, { "城池": 29, "武将": 78, "登场年": 198 } ], "跟随": [ {

JSON 数组转化 OC的数组转化成OC格式的字符串

1.将OC的数组转化成OC格式的字符串    NSArray * arr = @[@"aa",@"bb",@"cc"];2.转化    NSString * jsonStr = [arr JSONString];    NSLog(@"%@",jsonStr);

Java的Json解析包FastJson使用

阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser.包括自称最快的JackJson:功能强大,完全支持Java Bean.集合.Map.日期.Enum,支持范型,支持自省:无依赖,能够直接运行在Java SE 5.0以上版本:支持Android:开源 (Apache 2.0) 源码地址:https://github.com/alibaba/fastj