跳转至

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不需要引号
  • 数组用方括号 [] 表示
  • 对象用花括号 {} 表示

示例格式

{
    "name": "张三",
    "age": 30,
    "isActive": true,
    "hobbies": ["读书", "游泳"],
    "address": {
        "city": "北京"
    }
}

注意事项

  • ⚠️ 格式正确性: JSON字符串必须格式正确,否则解析会失败
  • ⚠️ 引号使用: 属性名和字符串值必须使用双引号,不能使用单引号
  • ⚠️ 错误处理: 解析JSON时建议使用try-catch处理异常
  • ⚠️ 特殊字符: 字符串中的特殊字符需要转义(如 \", \\, \n
  • ⚠️ 数据类型: 注意JSON中的数据类型(字符串、数字、布尔值、null)
  • ⚠️ 性能考虑: 大量数据时注意JSON序列化和反序列化的性能
  • JSON.stringify()和JSON.parse()是JavaScript标准方法
  • Java中可以使用org.json库处理JSON
  • 建议在解析前验证JSON格式

使用场景

  • 数据序列化和反序列化
  • API数据交换
  • 配置信息存储
  • 复杂数据结构传递
  • 数据格式转换

如需查看完整脚本代码,请访问源文档链接。