json的创建及解析¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a3u18aup4s
脚本说明¶
该脚本用于创建和解析JSON数据。在MyApps平台中,可以使用JavaScript的JSON对象或Java的JSON库来创建和解析JSON数据。
JSON创建¶
方式1:使用JSON.stringify()创建JSON字符串¶
(function(){
var obj = {
name: "张三",
age: 30,
city: "北京"
};
var jsonString = JSON.stringify(obj);
return jsonString; // 输出: {"name":"张三","age":30,"city":"北京"}
})();
方式2:创建包含数组的JSON¶
(function(){
var obj = {
name: "张三",
age: 30,
hobbies: ["读书", "游泳", "旅游"]
};
var jsonString = JSON.stringify(obj);
return jsonString;
})();
方式3:创建嵌套对象的JSON¶
(function(){
var obj = {
name: "张三",
age: 30,
address: {
province: "北京",
city: "北京市",
district: "朝阳区"
}
};
var jsonString = JSON.stringify(obj);
return jsonString;
})();
方式4:使用Java JSONArray创建JSON¶
(function(){
var JSONArray = new Packages.org.json.JSONArray();
JSONArray.put("值1");
JSONArray.put("值2");
JSONArray.put("值3");
var jsonString = JSONArray.toString();
return jsonString; // 输出: ["值1","值2","值3"]
})();
方式5:使用Java JSONObject创建JSON¶
(function(){
var JSONObject = new Packages.org.json.JSONObject();
JSONObject.put("name", "张三");
JSONObject.put("age", 30);
JSONObject.put("city", "北京");
var jsonString = JSONObject.toString();
return jsonString; // 输出: {"name":"张三","age":30,"city":"北京"}
})();
JSON解析¶
方式1:使用JSON.parse()解析JSON字符串¶
(function(){
var jsonString = '{"name":"张三","age":30,"city":"北京"}';
var obj = JSON.parse(jsonString);
return obj.name; // 输出: 张三
})();
方式2:解析包含数组的JSON¶
(function(){
var jsonString = '{"name":"张三","hobbies":["读书","游泳","旅游"]}';
var obj = JSON.parse(jsonString);
var hobbies = obj.hobbies;
return hobbies.join(", "); // 输出: 读书, 游泳, 旅游
})();
方式3:解析嵌套对象的JSON¶
(function(){
var jsonString = '{"name":"张三","address":{"province":"北京","city":"北京市"}}';
var obj = JSON.parse(jsonString);
var address = obj.address;
return address.province + " " + address.city; // 输出: 北京 北京市
})();
方式4:使用Java JSONArray解析JSON数组¶
(function(){
var jsonString = '["值1","值2","值3"]';
var JSONArray = new Packages.org.json.JSONArray(jsonString);
var result = [];
for(var i = 0; i < JSONArray.length(); i++){
result.push(JSONArray.getString(i));
}
return result.join(", ");
})();
方式5:使用Java JSONObject解析JSON对象¶
(function(){
var jsonString = '{"name":"张三","age":30,"city":"北京"}';
var JSONObject = new Packages.org.json.JSONObject(jsonString);
var name = JSONObject.getString("name");
var age = JSONObject.getInt("age");
var city = JSONObject.getString("city");
return name + ", " + age + ", " + city;
})();
扩展示例¶
示例1:从文档字段创建JSON¶
(function(){
var doc = getCurrentDocument();
var name = doc.getItemValueAsString("姓名字段");
var age = doc.getItemValueAsDouble("年龄字段");
var city = doc.getItemValueAsString("城市字段");
var obj = {
name: name,
age: age,
city: city
};
var jsonString = JSON.stringify(obj);
return jsonString;
})();
示例2:解析JSON并更新文档字段¶
(function(){
var doc = getCurrentDocument();
var jsonString = doc.getItemValueAsString("JSON字段");
if(jsonString != null && jsonString.trim().length > 0){
var obj = JSON.parse(jsonString);
// 更新文档字段
doc.findItem("姓名字段").setValue(obj.name);
doc.findItem("年龄字段").setValue(obj.age);
doc.findItem("城市字段").setValue(obj.city);
return "字段更新成功";
}
return "JSON字段为空";
})();
示例3:创建JSON数组¶
(function(){
var items = ["项目1", "项目2", "项目3"];
var jsonString = JSON.stringify(items);
return jsonString; // 输出: ["项目1","项目2","项目3"]
})();
示例4:解析JSON数组并遍历¶
(function(){
var jsonString = '["项目1","项目2","项目3"]';
var items = JSON.parse(jsonString);
var result = [];
for(var i = 0; i < items.length; i++){
result.push("第" + (i + 1) + "项: " + items[i]);
}
return result.join("\n");
})();
示例5:创建复杂JSON结构¶
(function(){
var data = {
user: {
id: "001",
name: "张三",
age: 30
},
orders: [
{id: "O001", amount: 100},
{id: "O002", amount: 200}
],
total: 300
};
var jsonString = JSON.stringify(data);
return jsonString;
})();
示例6:解析复杂JSON结构¶
(function(){
var jsonString = '{"user":{"id":"001","name":"张三"},"orders":[{"id":"O001","amount":100}]}';
var data = JSON.parse(jsonString);
var userName = data.user.name;
var orderCount = data.orders.length;
return "用户: " + userName + ", 订单数: " + orderCount;
})();
示例7:JSON错误处理¶
(function(){
var jsonString = '{"name":"张三","age":30}';
try{
var obj = JSON.parse(jsonString);
return obj.name;
}catch(e){
return "JSON解析错误: " + e.getMessage();
}
})();
示例8:验证JSON格式¶
(function(){
var jsonString = '{"name":"张三","age":30}';
try{
var obj = JSON.parse(jsonString);
// 验证必需字段
if(obj.name == null || obj.age == null){
return "JSON格式不完整";
}
return "JSON格式正确";
}catch(e){
return "JSON格式错误: " + e.getMessage();
}
})();
示例9:JSON格式化输出¶
(function(){
var obj = {
name: "张三",
age: 30,
city: "北京"
};
// 格式化输出(带缩进)
var jsonString = JSON.stringify(obj, null, 2);
return jsonString;
})();
示例10:从查询结果创建JSON¶
(function(){
var domainId = getWebUser().getDomainid();
var sql = "SELECT id, item_姓名字段, item_年龄字段 FROM tlk_表单名 WHERE domainid = '" + domainId + "' LIMIT 10";
var datas = queryBySQL(sql);
var result = [];
if(datas != null && datas.size() > 0){
for(var it = datas.iterator(); it.hasNext();){
var data = it.next();
var item = {
id: data.getId(),
name: data.getItemValueAsString("姓名字段"),
age: data.getItemValueAsDouble("年龄字段")
};
result.push(item);
}
}
var jsonString = JSON.stringify(result);
return jsonString;
})();
关键函数说明¶
JavaScript JSON对象¶
JSON.stringify(obj): 将JavaScript对象转换为JSON字符串JSON.parse(jsonString): 将JSON字符串解析为JavaScript对象
Java JSON库¶
Packages.org.json.JSONObject: Java JSON对象类Packages.org.json.JSONArray: Java JSON数组类JSONObject.put(key, value): 添加键值对JSONObject.getString(key): 获取字符串值JSONObject.getInt(key): 获取整数值JSONArray.put(value): 添加元素JSONArray.getString(index): 获取指定索引的字符串值JSONArray.length(): 获取数组长度
JSON格式说明¶
基本规则¶
- 属性名必须用双引号括起来
- 字符串值必须用双引号括起来
- 数字、布尔值、null不需要引号
- 数组用方括号
[]表示 - 对象用花括号
{}表示
示例格式¶
注意事项¶
- ⚠️ 格式正确性: JSON字符串必须格式正确,否则解析会失败
- ⚠️ 引号使用: 属性名和字符串值必须使用双引号,不能使用单引号
- ⚠️ 错误处理: 解析JSON时建议使用try-catch处理异常
- ⚠️ 特殊字符: 字符串中的特殊字符需要转义(如
\",\\,\n) - ⚠️ 数据类型: 注意JSON中的数据类型(字符串、数字、布尔值、null)
- ⚠️ 性能考虑: 大量数据时注意JSON序列化和反序列化的性能
- JSON.stringify()和JSON.parse()是JavaScript标准方法
- Java中可以使用org.json库处理JSON
- 建议在解析前验证JSON格式
使用场景¶
- 数据序列化和反序列化
- API数据交换
- 配置信息存储
- 复杂数据结构传递
- 数据格式转换
如需查看完整脚本代码,请访问源文档链接。