`
wx1568444409
  • 浏览: 14490 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

根据规则生成假数据

 
阅读更多
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.*;

/**
 * Created by hongcq on 15/12/24.
 */
public class UTest {

    public static void main(String[] args) {

        String ruleList = "[{\"field\":\"data.companyID\",\"params\":{\"length\":\"1\",\"username\":\"2\"},\"ruleID\":4},{\"field\":\"data.companyName\",\"params\":{\"length\":\"12\",\"ruleID\":5}}]";
        String response = "{\"error\":{\"returnCode\":0,\"returnMessage\":\"success\",\"returnUserMessage\":\"success\"},\"data\":{\"companyID\":\"434325435435\",\"companyName\":\"\\u4eba\\u4eba\\u884c\\u79d1\\u6280\",\"companyAbbrName\":\"\\u4eba\\u4eba\\u884c\"}}";
        UTest test = new UTest();

        ArrayList<FieldNode> headers = test.genHeader(ruleList);
        JSONObject object = JSON.parseObject(response);
        test.genResponse(object, headers);

        System.out.println(JSON.toJSONString(object));
    }

    /**
     * 构造返回信息
     *
     * @param obj
     * @param nextObjList
     * @return String
     */
    private void genResponse(JSONObject obj, ArrayList<FieldNode> nextObjList) {
        Set<String> set = obj.keySet();
        for (String k : set) {
            for (FieldNode node : nextObjList) {
                if (!k.equals(node.getKey())) {
                    continue;
                }
                // 叶子节点,需要构造假数据
                if (node.getNextObjList().size() == 0 && node.getObj() != null) {
                    obj.put(k, genData(node.getObj()));
                    continue;
                }
                // 非叶子节点继续遍历
                genResponse(obj.getJSONObject(k), node.getNextObjList());
            }
        }
    }

    /**
     * 生成假数据
     *
     * @param object
     * @return
     */
    private Object genData(JSONObject object) {
        return "xxxx";
    }

    /**
     * 构建链表规则信息
     *
     * @param rules
     * @return list
     */
    private ArrayList<FieldNode> genHeader(String rules) {
        JSONArray ruleList = JSON.parseArray(rules);

        JSONObject obj = null;
        FieldNode parent = null;
        FieldNode node = null;
        ArrayList<FieldNode> header = new ArrayList<>();

        for (int i = 0; i < ruleList.size(); i++) {

            obj = ruleList.getJSONObject(i);
            String field = obj.getString("field");
            if (null == field || "".equals(field)) {
                continue;
            }

            // field String以"."分隔成array,并以链表形式存储
            String[] fields = field.split("\\.");
            parent = null;

            // 构建链表
            for (String key : fields) {
                if (key == null || "".equals(key)) {
                    continue;
                }
                // 如果没有表头节点,就增加一个
                if (parent == null) {
                    parent = getParent(header, key);
                    if (parent == null) {
                        node = new FieldNode();
                        node.setKey(key);
                        addParent(header, node);
                    } else {
                        continue;
                    }
                } else {
                    node = new FieldNode();
                    node.setKey(key);
                    parent.addChild(node);
                }
                parent = node;
            }
            if (parent != null) {
                parent.setObj(obj);
            }
        }

        return header;
    }

    /**
     * 增加链表头节点
     *
     * @param list
     * @param node
     * @return void
     */
    private void addParent(ArrayList<FieldNode> list, FieldNode node) {
        list.add(node);
    }

    /**
     * 获取表头节点
     *
     * @param list
     * @param key
     * @return
     */
    private FieldNode getParent(ArrayList<FieldNode> list, String key) {
        for (FieldNode child : list) {
            if (child.getKey().equals(key)) {
                return child;
            }
        }
        return null;
    }

    class FieldNode {

        private String key;
        private JSONObject obj;
        private ArrayList<FieldNode> nextObjList = new ArrayList<>();

        public String getKey() {
            return key;
        }

        public void setKey(String key) {
            this.key = key;
        }

        public JSONObject getObj() {
            return obj;
        }

        public void setObj(JSONObject obj) {
            this.obj = obj;
        }

        public ArrayList<FieldNode> getNextObjList() {
            return nextObjList;
        }

        public void setNextObjList(ArrayList<FieldNode> list) {
            this.nextObjList = list;
        }

        /**
         * 增加子节点
         *
         * @param node
         * @return void
         */
        public void addChild(FieldNode node) {
            if (!hasChild(node)) {
                nextObjList.add(node);
            }
        }

        /**
         * 是否包含某个子节点
         *
         * @param node
         * @return boolean
         */
        public boolean hasChild(FieldNode node) {
            for (FieldNode n : nextObjList) {
                if (n.getKey().equals(node.getKey())) {
                    return true;
                }
            }
            return false;
        }
    }

}

转载于:https://my.oschina.net/qinglive/blog/857539

分享到:
评论

相关推荐

    jfairy,Java假数据生成器.zip

    此外,JFairy还支持自定义数据生成规则,开发者可以根据自己的需求扩展其功能。这个工具对于单元测试、集成测试、数据填充或者创建演示数据等场景特别有用,能有效提升开发效率并保护真实数据的隐私。 在"jfairy-...

    通过正则表达式生成数据

    这在数据测试、生成假数据或者模拟真实场景时非常有用。 一、正则表达式基础 1. **基本元素**:正则表达式由一系列字符和特殊符号组成,如字母、数字、特殊字符以及元字符(如`.`、`*`、`+`、`?`、`^`、`$`、`|`、...

    dotnet-Bogus一个简单而理智的假数据生成器用于CF和VBNET

    描述中提到的“简单而理智”的特点,意味着Bogus库设计得易于理解和使用,同时在生成假数据时保持了一定的逻辑性和一致性。它提供了丰富的预定义规则,可以生成各种类型的数据,如姓名、地址、电话号码、电子邮件等...

    基于中智模糊关联规则生成的大数据挖掘分析算法.pdf

    本文是一篇关于大数据挖掘分析算法的研究论文,其中提出了一种基于中智模糊关联规则生成的算法,以解决传统关联规则挖掘在处理大数据时存在的问题。论文对大数据挖掘方法和关联规则挖掘的基础知识进行了介绍,并着重...

    mockschema最好的方法来生成假数据处理组件

    2. **生成假数据**:然后,使用MockSchema库根据定义的JSON Schema生成一组或多组假数据。这些数据可以是单个对象,也可以是一组数组,取决于你的需求。 3. **集成到项目**:将生成的假数据注入到你的前端应用中,...

    faker-elixir, FakerElixir为你生成假数据.zip

    FakerElixir是一款基于Elixir语言的开源库,专门用于生成模拟或假数据。在软件开发、测试或者数据分析等场景中,有时我们需要大量的虚构数据来填充数据库、创建示例、或者进行性能测试。FakerElixir就是为此目的而...

    plaitpy一个用于从可组合的yaml模板生成假数据的程序

    "plaitpy" 是一个Python程序,其主要功能是生成假数据。这个工具基于可组合的yaml模板,这意味着用户可以使用yaml格式的文件来定义数据结构,并让plaitpy根据这些模板生成相应的伪造数据。这对于软件开发过程中的...

    Faker是一个Python包,它为你生成假数据.zip

    它能生成各种类型的假数据,如姓名、地址、电话号码、电子邮件地址,甚至包括复杂的日期和时间、信用卡号等。 Faker库的核心在于其Provider系统,这些Provider是专门用来生成特定类型数据的模块。例如,`name....

    高性能虚假数据生成器,造数据神器

    "高性能虚假数据生成器,造数据神器"这个标题暗示我们这里涉及的是一个能够高效生成各种类型假数据的工具,可能是一个Python库或软件。在Python社区中,Mimesis(来源于压缩包子文件的文件名称mimesis-master)是一...

    Go-Faker会根据您的Go(Golang)Struct生成一个假数据

    "Go-Faker"就是这样一个工具,它能够根据你的Go(Golang)结构体生成随机的假数据,极大地简化了这个过程。 Go-Faker库是Go语言中的一个强大的工具,它的核心功能是生成各种类型的模拟数据,包括但不限于字符串、...

    PHP生成复杂数据的库.zip

    Alice库是基于Faker的,Faker是一个强大的PHP库,可以生成假的、但看起来真实的各种数据,如姓名、地址、电话号码、日期等。Alice则扩展了Faker的功能,提供了YAML或JSON格式的配置文件来定义数据模型,允许用户...

    excel随机生成数据

    7. **数据验证**:通过设置数据验证规则,你可以限制单元格中的数据必须满足特定条件,例如在特定范围内或者符合某种格式,这样生成的随机数据将符合你设定的规则。 8. **宏和VBA**:对于更复杂的随机数据生成,...

    laravel批量生成假数据的方法

    而Laravel提供的Eloquent ORM模型和Faker库相结合,可以方便地批量生成假数据。本文将详细介绍如何在Laravel中使用Faker库批量生成假数据的方法。 首先,需要了解的是Laravel的Eloquent ORM模型工厂(Factory)。...

    可以给APP添加假数据的工具.rar

    描述中提到,“太多无法一一验证是否可用”,暗示这个压缩包可能包含多个不同的假数据生成工具,每个工具可能有不同的特性和用途,由于数量众多,可能无法逐一确认它们的功能和兼容性。同时,“程序如果跑不起来需要...

    PHP数据生成器数据库工具

    10. **安全性**:生成敏感数据时,工具应提供选项来生成安全的假数据,避免泄露真实信息。 总之,PHP数据生成器数据库工具是开发过程中的一大助力,能够提升工作效率,降低测试和调试阶段的工作负担。通过熟练掌握...

    mssql数据生成器

    10. **安全性**:在生成敏感数据时,需要考虑隐私保护,可以使用脱敏技术,如替换真实个人信息为随机但格式正确的假数据。 综上所述,mssql数据生成器是一个强大且实用的工具,通过灵活配置和高效执行,能够有效地...

    mock.js实现模拟生成假数据功能示例

    3. 使用Mock.mock()方法:在JavaScript中,Mock.mock()方法是核心,它根据提供的数据模板和生成规则来生成模拟数据。在这个方法中,可以定义数据的结构、数据类型、随机性以及具体的随机规则。 4. 随机数据生成:...

    fakesome:假数据生成器

    标题 "fakesome: 假数据生成器" 指的是一个专门用于生成模拟数据的工具,Fakesome。这个工具的主要目的是帮助开发者在不使用真实数据的情况下填充数据库、测试应用程序或者构建API原型。在实际开发过程中,保护用户...

    Faker:一个生成假象数据的PHP类库

    Faker可以帮助你生成各种类型的假数据,如姓名、地址、电话号码等,避免了手动输入的繁琐和错误。 2. **XML文档创建**:如果你需要创建结构化的XML文档,比如用于API测试或数据交换,Faker可以生成随机但格式正确的...

    造假者:Faker是一个Crystal库,可以为您生成假数据

    在IT领域,生成假数据是一项常见的任务,特别是在测试、数据分析和数据库填充等场景。`Faker` 是一个非常有用的工具,尤其在 Crystal 编程语言中。本文将深入探讨 Faker 库及其在 Crystal 中的应用。 ### Faker 库...

Global site tag (gtag.js) - Google Analytics