在项目中使用JSON格式传输数据时经常碰到数据格式的转换, 一般可以使用Json.org的lib, 以及一些第三方的框架来完成。 但是如果只是一个简单的项目,而且json的使用并不多的情况下,可以自己写一个类来处理。
在代码中,我让我的Json类继承与TreeMap,这样可以利用Map与Json格式的相似性,节省一些代码量和定义数据结构的烦恼。 Json结构在前台支持基本数据类型和数据类型, 所以这样的数据类型在js中也是有效的:
{'1':'ha','2':'ch','3':['list1','list2','list3']}
依据这个格式,这个类只处理不同json格式和含有数组的数据类型的转换。代码如下,
public class Json extends TreeMap<String, Object> {
/**
*
*/
private static final long serialVersionUID = 1L;
public void add(String key, Object value) {
if (value instanceof String) {
value = JsonUtil.encode((String) value);
}
this.put(JsonUtil.encode(key), value);
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("{");
boolean first = true;
for (Iterator<Map.Entry<String, Object>> it = this.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, Object> me = it.next();
Object temp = me.getValue();
if (!first)
sb.append(",");
else
first = false;
sb.append("'" + me.getKey() + "':");
if (temp instanceof String || temp.getClass().isPrimitive()
|| temp.getClass().getName().startsWith("java.lang")) {
sb.append("'" + temp + "'");
} else if (temp instanceof Json) {
sb.append(((Json) temp).toString());
} else {
sb.append(temp.toString());
}
}
sb.append("}");
return sb.toString();
}
public String getStringValue(String key) {
return (String) this.get(key);
}
public int getIntValue(String key) {
String str = getStringValue(key);
if (str != null)
str = str.trim();
return new Integer(str).intValue();
}
public String firstKeyString() {
if (this == null || this.size() == 0)
throw new RuntimeException("The json map doesn't have any contents!");
return (String) this.keySet().iterator().next();
}
public Date getSqlDate(String key) {
String dateStr = getStringValue(key);
try {
return java.sql.Date.valueOf(dateStr);
} catch (IllegalArgumentException e) {
}
return null;
}
}
另外有一个Util类来处理一些数据转换, 这个类相当于一个Factory, 也可以用你过来从String parse 一个Json Java对象,
public class JsonUtil {
public static Json parse(String json) {
Json js = new Json();
if (json == null || json.trim().length() == 0 || json.trim().length() == 2)
return js;
json = json.substring(1, json.length() - 1);
char[] chars = json.toCharArray();
for (int i = 0, n = chars.length; i < n;) {
StringBuffer sbKey = new StringBuffer();
while (chars[i] != ':' && i < n) {
if (chars[i] != '\'')
sbKey.append(chars[i]);
i++;
}
if (chars[i] == ':') {
StringBuffer sb = new StringBuffer();
int j = i + 1;
if (j < n && chars[j] == '{') {
int count = 0;
// j++;
while (j < n && (chars[j] != '}' || count > 1)) {
if (chars[j] == '{')
count++;
if (chars[j] == '}')
count--;
sb.append(chars[j]);
j++;
}
if (j == n)
return new Json();
sb.append(chars[j]);
js.add(sbKey.toString(), parse(sb.toString()));
i = j + 1;
while (i < n && chars[i] == ',')
i++;
} else if (j < n && chars[j] == '[') {
int count = 0;
while (j < n && (chars[j] != ']' || count > 1)) {
if (chars[j] == '[')
count++;
if (chars[j] == ']')
count--;
sb.append(chars[j]);
j++;
}
if (j == n)
return new Json();
sb.append(chars[j]);
js.add(sbKey.toString(), buildList(sb.toString()));
i = j + 1;
while (i < n && chars[i] == ',')
i++;
} else if (j < n) {
while (j < n) {
if (chars[j] != '\'')
sb.append(chars[j]);
if (j < n - 1 && chars[j + 1] == ',') {
js.add(sbKey.toString(), sb.toString());
i = j + 2;
break;
} else if (j == n - 1) {
js.add(sbKey.toString(), sb.toString());
i = j + 1;
break;
}
j++;
}
} else {
js.add(sbKey.toString(), "");
i = n;
}
}
}
return js;
}
public static List<String> buildList(String value) {
List<String> result = new ArrayList<String>();
if (value == null || value.trim().length() <= 2)
return result;
value = value.substring(1, value.length() - 1);
String[] members = value.split(",");
for (int i = 0, n = members.length; i < n; i++) {
String temp = members[i];
if (temp.startsWith("'"))
result.add(encode(temp.substring(1, temp.length() - 1)));
else
result.add(encode(temp));
}
return result;
}
public static String encode(String value) {
if (value == null)
return "";
char content[] = new char[value.length()];
value.getChars(0, value.length(), content, 0);
StringBuffer result = new StringBuffer(content.length + 50);
for (int i = 0; i < content.length; i++) {
switch (content[i]) {
case '\'':
result.append("\\x27");
break;
case '\n':
result.append("\\x0A");
break;
case '\r':
result.append("\\x0D");
break;
default:
result.append(content[i]);
}
}
return result.toString();
}
public static void main(String[] args) {
String js = "{'1':'ha','2':'ch','3':['lis't1','lis\nt2','lis\n\rt3']}";
Json json = JsonUtil.parse(js);
System.out.println(json);
}
这里处理了会对前台js识别Json数组有影响的字符, 包括['|\n|\r],这三个。 处理方法是用这些字符的ASCII码来代替,这样js不会把它当作特殊的字符处理比如回车符,而只有在这些字符显示出来的时候才会产生作用。
分享到:
相关推荐
描述:C#的JSON数据转换,转换对象为JSON格式数据 标签:C#、JSON JSON数据格式转换的重要性 在C#语言中,JSON数据格式转换是非常重要的,因为它可以将对象转换为JSON格式的数据,从而实现数据的交换和存储。JSON...
下面通过一个具体的示例来展示如何使用 Android 2.3 提供的 JSON 解析类来构建一个 JSON 文本: ```java // 假设现在要创建这样一个 JSON 文本 // { // "phone": ["12345678", "87654321"], // 数组 // "name": ...
1. 首先,我们需要一个Java类来映射JSON数据。例如,我们有一个User类,包含id、name和email字段: ```java public class User { private int id; private String name; private String email; // 构造函数、...
为了将JSON数据转换为自定义的Python类的对象,我们可以利用`object_hook`参数指定一个函数,该函数接受一个字典并将其转换为我们所需的类的实例。 ##### 实现步骤 1. **定义类**:首先,需要定义一个Python类,该...
在标题"Json.net Json数据转换的利器"中,"Json数据转换"是指Json.NET的主要功能,即处理JSON格式的数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...
在VB(Visual Basic)编程环境中,使用官方API来读写JSON数据格式文件是常见的操作,尤其是在处理网络数据交换或者存储配置信息时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和...
`JsonUtil.java`看起来是一个自定义的工具类,很可能包含了对`json-lib`和`ezmorph`的封装,提供了简洁易用的API供开发者进行JSON操作。可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它基于JavaScript的一...在实际项目中,根据需求灵活运用这两个方法,能够解决大部分与JSON数据转换相关的问题。
将VOC格式的数据集转换为COCO格式,xml格式转换成json格式 effcientdet等网络中均可用到
例如,你可以使用`JsonConvert.SerializeObject()`方法将一个C#对象序列化成JSON,然后使用`JsonConvert.DeserializeObject()`方法将JSON字符串反序列化回相应的对象类型。 2. **动态JSON**:库提供`JObject`,`...
【描述】:本文档将详细介绍如何将 JSON 数据转换成易语言的自定义数据类型,并提供了一个示例软件供参考。通过这个方法,可以自动化地将 JSON 对象映射到易语言的数据结构中,避免手动创建复杂数据结构的繁琐工作。...
在C++编程中,将JSON字符串转换为C++类对象是一项常见的任务,特别是在处理网络通信、数据存储或配置文件时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间的数据传输。...通过理解这些转换方法,开发者可以轻松地在C#应用程序中与其他系统进行JSON数据交换,提升开发效率。
在实际使用中,这可能包括将大型的、未格式化的JSON字符串转化为可读的树状视图,或者将JSON数据转换成其他格式,如CSV或XML,以便进一步处理。 **文件名称列表:JsonView** 这表明压缩包内可能包含JSONView的安装...
在IT领域,数据转换是一项常见的任务,...总之,将Excel数据转换为JSON格式是一个实用的过程,尤其在需要与Web应用交互或进行数据分析时。通过理解这两种格式的特点和转换方法,你可以更有效地管理和利用你的数据资源。
在所提供的代码片段中,定义了一个名为`Json`的类,该类包含了一些静态方法用于将不同的Java数据类型转换为JSON格式的字符串。这些方法包括: - `object2json(Object obj)`:这是主方法,用于处理任意类型的Java...
"json2bin"是一个专门用于将JSON数据转换为二进制格式的工具。它能够将JSON对象转换成更紧凑的二进制表示,从而节省存储空间和提高处理速度。在软件开发过程中,这样的工具非常有用,尤其是在处理大量结构化数据时。...
标题中的“将各种数据转换JSON格式”指的是将不同来源或结构的数据,如表格(CSV、Excel)、数据库记录、XML文档等,转换为JSON对象,以便于数据处理、存储或网络传输。这涉及到数据解析、格式转换和编码等多个技术...
本文将深入探讨如何在Unity3D中将任意类型的数据转换成JSON格式。 首先,我们需要了解JSON的基本结构。JSON是一种基于文本的数据格式,主要由键值对组成,可以表示数组和对象。对象以大括号 `{}` 包裹,键值对以...