帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:random-js  str  rand  Generator  generic  数据  随机  Robust  
A robust, generic, streaming random json data generator for your data

  • 源代码名称:json-data-generator
  • 源代码网址:http://www.github.com/acesinc/json-data-generator
  • json-data-generator源代码文档
  • json-data-generator源代码下载
  • Git URL:
    git://www.github.com/acesinc/json-data-generator.git
  • Git Clone代码到本地:
    git clone http://www.github.com/acesinc/json-data-generator
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/acesinc/json-data-generator
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • Json数据生成器

    你是否需要生成一个实时的json数据流来测试应用程序? 我们经常会考虑流媒体数据的来源,但是这只是因为在Prototype场景中,我们只考虑到了这一点,而我们通常只会把它作为一个解决方案,因为它只适合特定的。 有很多的json数据生成器在线( 与 json生成器或者 mockaroo类似。),但我们无法在测试和原型中找到离线数据生成器。 我们发现它非常有用,我们决定开源,所以其他人可以在自己的项目中使用它。

    有关更多信息,请查看公告博客

    项目状态

    Build Status

    特性

    我们在为测试目的生成数据时有几个需要。 它们如下所示:

    • 生成json文档,这些文档在json本身中定义为 。 这将允许我们采取现有的模式,将它们放入生成器,修改它们,开始生成我们应用程序的数据。
    • 用随机数据作为值产生 json 。 这包括不同类型的随机数据,不只是随机字符,而是随机名称。计数器。日期。原始类型等等的东西。
    • 生成一个固定的json事件流,发送到 。 我们可能需要将数据发送到日志文件或者 Kafka 主题或者其他内容。
    • 按定义或者随机时间周期,按定义的或者随机的时间周期生成事件,以表现为真实的系统。

    现在我们拥有了支持所有这些东西的数据生成器,可以在我们自己的网络上运行,并为应用程序生成json数据流。

    许可证

    Apache许可,版本 2.0

    体系结构

    生成器具有以下基本架构:

    • JsonDataGenerator - 加载配置和运行仿真的主要应用程序。
    • Simulation Configuration - 一个代表你想要运行的所有模拟的json文件。
    • Workflow Definitions - 定义由仿真运行的工作流的Json文件。

    启动 JsonDataGenerator 时,指定你的Simulation Configuration,它也引用一个或者多个模拟,加载过程被加载,工作流在它自己的线程内启动。 Json事件生成并发送到定义的Producers

    定义了什么

    你需要在配置文件中定义的信息有多个部分是开发人员/集成商。 我们会分解这部分的内容。

    仿真配置

    Simulation Configuration 定义了以下内容:

    属性类型说明
    工作流Array定义要运行的工作流列表
    producerArray定义事件应发送到的生产者列表

    使用以下属性定义 Workflow:

    属性类型说明
    workflowName字符串工作流的NAME
    workflowFilename字符串要运行的工作流配置文件的文件名
    范例整型运行实例的相同副本的数量( 可选,默认值为 1 )

    下面是工作流配置的示例:

    "workflows": [{
    "workflowName":"test",
    "workflowFilename":"exampleWorkflow.json",
    "instances": 1
     }]

    使用以下属性定义 Producer:

    属性类型说明
    类型字符串生产商的类型
    可选属性&O字符串其他属性是根据生产者的type 添加到生产者配置

    Currenty支持的Producers 及其配置属性为:

    记录器

    Logger生产者将json事件发送到 logs 目录中的日志文件到一个名为 json-data.log的文件中。 日志根据时间和大小进行滚动。 像这样配置:

    {
    "type":"logger"
    }

    此时没有日志记录器生成器的配置选项。

    文件

    文件生成器将json事件发送到文件。 将向指定目录中的每个文件写入一个事件。 像这样配置:

    {
    "type":"file",
    "output.directory":"/tmp/dropbox/test2",
    "file.prefix":"MYPREFIX_",
    "file.extension":".json"
    }

    文件记录器将尝试创建由 output.directory 指定的目录。

    HTTP POST

    一个 HTTP POST 生产者将json事件作为请求体发送到一个 URL 。 像这样配置:

    {
    "type":"http-post",
    "url":"http://localhost:8050/ingest"
    }

    如果需要向需要客户端证书的HTTPS端点发送数据,则可以使用 javax.net.ssl.* 属性在命令行上提供这些证书的配置。 一个例子可能是:

    java -Djavax.net.ssl.trustStore=/path/to/trustsore.jks -Djavax.net.ssl.keyStore=/path/to/user/cert/mycert.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=password -jar json-data-generator-1.2.2-SNAPSHOT.jar mySimConfig.json

    Kafka

    Kafka 生成器将json事件发送到指定的Kafka 代理,并将它的作为字符串发送。 像这样配置:

    {
    "type":"kafka",
    "broker.server":"192.168.59.103",
    "broker.port": 9092,
    "topic":"logevent",
    "flatten": false,
    "sync": false
    }

    如果为 sync=false,则异步发送所有事件。 如果出于某些原因,你希望同步发送事件,请设置 sync=true 。 如果 flatten=true,生成器将将json发送到 Kafka 队列,而不是使用嵌套的json对象。

    {
    "test": {
    "one":"one",
    "two":"two"
     },
    "array": [
     {
    "element1":"one"
     },{
    "element2":"two"
     }]
    }

    将成为

    {
    "test.one":"one",
    "test.two":"two",
    "array[0].element1":"one",
    "array[1].element2":"two"
    }

    nat记录器将json事件发送给配置中指定的gnatsd代理。 下面的示例演示一个示例配置,该示例配置将json事件发送到本地运行的nat代理,。

    {
    "type":"nats",
    "broker.server":"127.0.0.1",
    "broker.port": 4222,
    "topic":"logevent",
    "flatten": false
    }

    注意,flatten 与 Kafka producer中的选项具有相同的效果。

    宁静生产者使用宁静向一个德鲁伊集群发送json事件。 德鲁伊是一个开源的分析数据存储和宁静是一个实时通信传输,德鲁伊支持ingesting数据。 像这样配置:

    {
    "type":"tranquility",
    "zookeeper.host":"localhost",
    "zookeeper.port": 2181,
    "overlord.name":"overlord",
    "firehose.pattern":"druid:firehose:%s",
    "discovery.path":"/druid/discovery",
    "datasource.name":"test",
    "timestamp.name":"startTime",
    "sync": true,
    "geo.dimensions":"where.latitude,where.longitude" 
    }

    当我们通过安静发送数据到鲁德德时,我们发送一个任务给德鲁德 that node 。 我们的任务实现目前不允许用户对使用的聚合器进行 specifc 。 我们创建一个单独的"事件"度量,它是计数聚合。 如果配置了属性,则其他所有内容都会被配置。 syncflatten 属性的行为与 Kafka Producer的行为完全相同。 这对我们目前是有效的,但是如果你需要更多的能力,请提交一个问题或者提交一个请求请求 !

    当你启动生成器时,它会联系德鲁伊的霸主并为你的数据源创建一个任务,然后将数据流到德鲁伊。

    英镑

    MQTT生产者向配置中指定的MQTT代理发送json事件。 下面的示例显示一个示例配置,它将json事件发送到本地运行的MQTT代理,侦听默认的MQTT端口。 示例还包括两个可选字段: 用户名和密码

    {
    "type":"mqtt",
    "broker.server":"tcp://localhost",
    "broker.port": 1883,
    "topic":"/logevent",
    "clientId":"LogEvent",
    "qos": 2,
    "username":"whoami",
    "password":"whatsmypassword"
    }

    MQTT生产者支持针对QOS和主题的步骤特定配置。 整个配置和其中的每个项目都是可选的。 将"mqtt"项添加到"ProducerConfig"映射中:

    "mqtt" : {
    "topic":"/elsewhere",
    "qos": 1
    }

    IoT

    Azure中心生产者向配置中指定的Azure物理集线器发送json事件。 从 HTTPS,AMQPS或者MQTT选择协议

    {
    "type":"iothub",
    "connectionString":"<- Get from Azure portal or Device Explorer ->",
    "protocol":"HTTPS",
    }

    全模拟配置示例

    下面是 Simulation Configuration file:的完整示例

    exampleSimConfig.json:
    {
    "workflows": [{
    "workflowName":"test",
    "workflowFilename":"exampleWorkflow.json",
    "instances" : 4
     }],
    "producers": [{
    "type":"kafka",
    "broker.server":"192.168.59.103",
    "broker.port": 9092,
    "topic":"logevent",
    "sync": false
     },{
    "type":"logger"
     }]
    }

    这个模拟运行4 个实例( 相同的工作流规则但在不同的线程上),将所有事件发送到定义的主题和将事件放到日志文件中的记录器生成器。 使用实例创建同一工作流的多个通信。

    工作流定义

    在单独的文件中定义 Workflow,允许你在模拟中拥有和运行多个 Workflows 。 工作流包含以下属性:

    属性类型说明
    eventFrequency整型步骤之间的时间以毫秒为单位的事件应在
    varyEventFrequency布尔型如果 true,一个随机的时间( 在eventFrequency的0到一半之间) 将被添加/减去到 eventFrequency
    repeatWorkflow布尔型如果 true,工作流在完成后将重复
    timeBetweenRepeat整型工作流重新启动前等待的时间以毫秒为单位
    varyRepeatFrequency布尔型如果 true,一个随机的时间( 在eventFrequency的0到一半之间) 将被添加/减去到 timeBewteenRepeat
    stepRunMode字符串可能的值:顺序,随机,random-pick-one 。 默认为顺序
    步骤Array工作流中要运行的工作流步骤的列表

    工作流程步骤

    工作流步骤是你生成的json事件的。 它们指定了json的外观以及它们将如何生成。 根据你选择的stepRunMode,生成器将按照不同的顺序执行你的步骤。 可能的情况如下:

    • 顺序- 步骤将按照它们在 array 中指定的顺序运行。
    • 随机- 步骤将被打乱并以随机顺序运行。 每次重复工作流程时都会执行reshuffled步骤。
    • random-pick-one - 将从你的配置中选择一个随机步骤并运行。 在工作流重复之前,不会运行其他步骤。 当工作流重复时,将选择一个不同的随机步骤。

    现在你已经了解了如何执行步骤,让我们来看看如何定义它们。

    属性类型说明
    配置对象的array这里步骤中生成的json对象
    工期整型如果为 0,则这里步骤将运行一次。 如果为 -1,这里步骤将永远运行。 任何数字都是以毫秒为单位运行这里步骤的时间。
    producerConfig对象映射可选:这里步骤的生成器配置- 可选和特定于每个制造商。 ( 参见producer文档)

    步骤配置

    步骤 config 部分中指定的配置是你想要输出的实际 json 。 例如你可以将以下json作为工作流中某个步骤的配置:

    {
    "test":"this is a test",
    "test2":"this is another test",
    "still-a-test": true
    }

    在每次步骤运行时,literly将生成该json对象,将它指定为步骤配置。 这很有趣,但是仅仅回显json并不是我们所要做的。 生成器支持许多 Functions,这些可以作为值放置到你的json中。 每次生成json时都会运行这些 Functions 。 以下是一个示例:

    {
    "timestamp":"nowTimestamp()",
    "system":"random('BADGE', 'AUDIT', 'WEB')",
    "actor":"bob",
    "action":"random('ENTER','LOGIN','EXIT', 'LOGOUT')",
    "objects": ["Building 1"],
    "location": {
    "lat":"double(-90.0, 90.0)",
    "lon":"double(-180.0, 180.0)"
     },
    "message":"Entered Building 1"
    }

    这里配置将生成类似于以下内容的json文档:

    {"timestamp":1430244584899,"system":"BADGE","actor":"bob","action":"LOGOUT","objects":["Building 1"],"location":{"lat":-19.4224,"lon":-165.0512},"message":"Entered Building 1"}

    每次时间戳。系统。动作和纬度/经度值都将随机生成。

    完整工作流定义配置示例

    下面是 Workflow Definition file:的完整示例

    exampleWorkflow.json:
    {
    "eventFrequency": 4000,
    "varyEventFrequency": true,
    "repeatWorkflow": true,
    "timeBetweenRepeat": 15000,
    "varyRepeatFrequency": true,
    "steps": [{
    "config": [{
    "timestamp":"nowTimestamp()",
    "system":"random('BADGE', 'AUDIT', 'WEB')",
    "actor":"bob",
    "action":"random('ENTER','LOGIN','EXIT', 'LOGOUT')",
    "objects": ["Building 1"],
    "location": {
    "lat":"double(-90.0, 90.0)",
    "lon":"double(-180.0, 180.0)"
     },
    "message":"Entered Building 1"
     }],
    "producerConfig" {
     },
    "duration": 0
     },{
    "config": [{
    "timestamp":"nowTimestamp()",
    "system":"random('BADGE', 'AUDIT', 'WEB')",
    "actor":"jeff",
    "action":"random('ENTER','LOGIN','EXIT', 'LOGOUT')",
    "objects": ["Building 2"],
    "location": {
    "lat":"double(-90.0, 90.0)",
    "lon":"double(-180.0, 180.0)"
     },
    "message":"Entered Building 2"
     }],
    "duration": 0
     }]
    }

    这个工作流每 4秒输出定义的json,然后再等待大约 15秒,然后再开始。

    正在运行生成器

    现在你已经知道如何配置生成器了,现在是运行它的时候了。 你需要 Maven 来构建应用程序,直到我们发布了一个版本。

    首先,克隆/fork 到 repo:

    git clone git@github.com:acesinc/json-data-generator.git
    cd json-data-generator

    现在构建它 !

    mvn clean package

    一旦完成,就会生成一个tar文件供你使用。 将tar文件解压到你想从以下位置运行应用程序的地方:

    cp target/json-data-generator-1.0.0-bin.tar your/directory
    cd your/directory
    tar xvf json-data-generator-1.0.0-bin.tar
    cd json-data-generator

    conf 目录中,你将发现一个示例 Simulation Configuration 和一个示例 Workflow Definition 。 你可以以改变这些,或者者使你自己的配置运行,但是现在我们只运行这些示例。 本示例模拟当用户在系统上执行操作时生成事件的审核系统。 要执行这里操作,请执行以下操作:

    java -jar json-data-generator-1.0.0.jar exampleSimConfig.json

    你将开始在控制台中看到输出,并且数据将开始生成。 它看起来像这样:

    ...
    2015-04-28 14:21:08,013 DEBUG n.a.d.j.g.t.TypeHandlerFactory [Thread-2] Discovered TypeHandler [ integer,net.acesinc.data.json.generator.types.IntegerType ]
    2015-04-28 14:21:08,013 DEBUG n.a.d.j.g.t.TypeHandlerFactory [Thread-2] Discovered TypeHandler [ timestamp,net.acesinc.data.json.generator.types.TimestampType ]
    2015-04-28 14:30:02,817 INFO data-logger [Thread-2] {"timestamp":1430253002793,"system":"BADGE","actor":"bob","action":"ENTER","objects":["Building 1"],"location":"45.5,44.3","message":"Entered Building 1"}
    2015-04-28 14:30:05,369 INFO data-logger [Thread-2] {"timestamp":1430253005368,"system":"AD","actor":"bob","action":"LOGIN","objects":["workstation1"],"location":null,"message":"Logged in to workstation 1"}
    2015-04-28 14:30:07,491 INFO data-logger [Thread-2] {"timestamp":1430253007481,"system":"AUDIT","actor":"bob","action":"COPY","objects":["/data/file1.txt","/share/mystuff/file2.txt"],"location":null,"message":"Printed/data/file1.txt"}
    2015-04-28 14:30:09,768 INFO data-logger [Thread-2] {"timestamp":1430253009767,"system":"AUDIT","actor":"bob","action":"COPY","objects":["/data/file1.txt","/share/mystuff/file2.txt"],"location":null,"message":"Printed/data/file1.txt"}

    这里示例仅输出到 Logger 生成器,所以所有数据都将转到控制台,并且它也被写入 json-data-generator/logs/json-data.log 写入 json-data.log的数据是每行单个事件,不包含日志时间戳和其他信息,如。

    如果要创建名为 mySimConfig.json的模拟配置,将该文件和任何工作流conigs放到 conf 目录中,然后再次运行:

    java -jar json-data-generator-1.0.0.jar mySimConfig.json

    支持功能

    你在 Workflow Definition 中看到,生成器支持许多不同的函数,它们允许你为json文档中的值生成随机数据。 下面是所有当前支持的Functions的列表及其支持/要求的参数。

    文本

    如果将文本值指定为属性的值,则将它回回到生成的json中。 例如:

    {
    "literal-bool": true
    }

    将始终生成:

    { 
    "literal-bool": true 
    }

    字符串函数

    函数参数说明
    alpha(#)要生成的字符数生成带有指定长度的字母字符的随机字符串
    alphaNumeric(#)要生成的字符数生成具有指定长度的字母数字字符的随机字符串
    firstName()n/a从预定义的名称列表生成随机的第一个 NAME
    lastName()n/a从预定义的名称列表生成随机的最后一个 NAME
    uuid()n/a生成随机 UUID
    stringMerge()分隔符,然后是要合并的字符串值接受输入参数并使用分隔符将它们合并在一起。 可以与 this.prop 或者 cur.prop 关键字一起使用,以合并生成的值,如: stringMerge(_, this.firstName, this.lastName) 它将输出像 Bilbo_Baggins 之类的东西

    基本函数

    函数参数说明
    boolean()n/a随机 true/false
    double([min, max])可选最小值或者范围如果没有 ARGS,则在 Double.MIN & MAX之间产生随机。 如果一个 arg,在最小和 Double.MAX. 之间生成一个 double,如果两个 ARGS,则在两个数字之间产生一个 double 。
    integer([min, max])可选最小值或者范围如果没有 ARGS,则在 Integer.MIN & MAX之间生成一个随机整数。 如果一个 arg,在最小和 Integer.MAX. 之间生成一个 double,如果两个 ARGS,则在两个数字之间产生一个 double 。
    long([min, max])可选最小值或者范围如果没有 ARGS,则在 Long.MIN & MAX之间生成一个随机长的长。 如果一个 arg,在最小和 Long.MAX. 之间生成一个 double,如果两个 ARGS,则在两个数字之间产生一个 double 。

    日期函数

    函数参数说明
    date([yyyy/MM/ddTHH:mm:ss,yyyy/MM/ddTHH:mm:ss])可选的最小日期或者日期范围在指定的最小值和最大值之间生成一个随机日期。 如果没有 ARGS,则在今天之前生成一个随机的日期。 如果一个 arg,则在指定的最小值之后生成一个日期。 如果两个 ARGS,则在这些日期之间生成日期。
    now([#_unit])添加到当前日期的可选编号和单位如果没有 ARGS,则生成现在的日期。 如果一个 arg,它将使用 # 部分作为时间和单位部分( 。y=year,d=day,h=hour,m=minute ),将 # 转换为添加的时间。 如果要减去时间,请将数字设为负数( 例如 。 -5 _d ) 。在iso8601格式的字符串中生成日期
    timestamp([yyyy/MM/ddTHH:mm:ss,yyyy/MM/ddTHH:mm:ss])可选的最小日期或者日期范围生成指定范围的时间戳( 例如 。长整型值) 。 date() 函数应用相同的规则
    nowTimestamp()n/a生成当前日期的时间戳( 例如 。长整型值) 。

    特殊函数

    函数参数说明
    random(val1,val2,...)要选择的文字值。 可以是字符串。整数。Longs 。双精度或者布尔值从指定值随机选择
    counter(name)要生成的计数器的NAME为特定的NAME 生成一个向上的数字。 为不同的计数器指定不同的名称。
    this.propNamepropName = 另一个属性的NAME用于引用已经生成的其他值( 例如 。 例如,this.test. 嵌套测试将引用以前生成的json对象中的test.nested-test 值。 在调用 date(this.otherDate) 等函数时,还可以指定 this. 子句,如将在生成的日期之后生成日期。
    cur.propNamepropName = 与这里属性位于同一级别的另一个属性的NAME允许你在与正在生成的当前属性相同级别上引用其他值。 当你想要引用生成的array 中的属性,而你不知道 array的索引时,这很有用。
    randomIncrementLong(name, baseValue, minStep, maxStep)要生成的值的NAME,它的基本值和步骤的边界为特定的NAME 生成随机步骤号。 为不同的计数器指定不同的名称。
    数组

    我们有两个用于数组的特殊 Functions 。 他们是 repeat()random() 。 这个函数用来指定你希望生成器获取中的元素,并重复它的生成器数一定次数。 你可以以指定次数,或者者如果没有提供任何参数,它将重复 0 -10次。 像这样使用:

    {
    "values": [
    "repeat(7)",
     {
    "date":"date('2015/04/01T00:00:00', '2015/04/25T00:00:00')",
    "count":"integer(1, 10)"
     }]
    }

    这将生成一个json对象,该对象具有 7个值,每个值具有 datecount的不同随机值。

    random() 函数将告诉生成器从 array 和out元素中选择一个随机元素。 像这样使用:

    {
    "values": [
    "random()",
     {
    "date":"date('2015/04/01T00:00:00', '2015/04/25T00:00:00')",
    "count":"integer(1, 10)"
     },{
    "thing1":"random('red', 'blue')"
     }]
    }

    这将生成一个带有一个元素的array,它的元素是 date & count 或者它的中的thing1 元素。

    示例

    下面是厨房接收器示例,展示了你可以生成数据的各种方式:

    {
    "strings": {
    "firstName":"firstName()",
    "lastName":"lastName()",
    "random":"random('one',"two", 'three')",
    "alpha":"alpha(5)",
    "alphaNumeric":"alphaNumeric(10)",
    "uuid":"uuid()"
     },
    "primatives": {
    "active":"boolean()",
    "rand-long":"long()",
    "rand-long-min":"long(895043890865)",
    "rand-long-range":"long(787658, 8948555)",
    "rand-int":"integer()",
    "rand-int-min":"integer(80000)",
    "rand-int-range":"integer(10, 20)",
    "rand-double":"double()",
    "rand-double-min":"double(80000.44)",
    "rand-double-range":"double(10.5, 20.3)"
     },
    "dates": {
    "rand-date":"date()",
    "min-date":"date("2015/03/01T00:00:00")",
    "range-date":"date("2015/03/01T00:00:00","2015/03/30T00:00:00")",
    "now":"now()",
    "nowTimestamp":"nowTimestamp()",
    "5days-ago":"now(-5_d)",
    "timestamp":"timestamp("2015/03/01T00:00:00","2015/03/30T00:00:00")"
     },
    "literals": {
    "literal-bool": true,
    "literal-int": 34,
    "literal-long": 897789789574389,
    "literal-double": 45.33
     },
    "references": {
    "after-5days-ago":"date(this.dates.5days-ago)",
    "isItActive":"this.primatives.active"
     },
    "counters": {
    "counter1":"counter('one')",
    "counter2":"counter('two')",
    "counter2-inc":"counter('two')"
     },
    "randomIncrementLongs": {
    "randomIncrementLong1":"randomIncrementLong('one', 1, 1, 10)"
    "randomIncrementLong2":"randomIncrementLong('two', 0, 0, 5000)"
     },
    "array": [
     {
    "thing":"alpha(3)"
     },
     {
    "thing2":"alpha(3)"
     },
     {
    "thing3": true
     },
     {
    "thing4":"job"
     }
     ],
    "repeat-array": [
    "repeat(3)",
     {
    "thing1":"random('red','blue')",
    "thing2":"random('red', 'blue')"
     }
     ]
    }

    它生成以下 json:

    {
    "strings": {
    "firstName":"Bob",
    "lastName":"Black",
    "random":"two",
    "alpha":"ihDra",
    "alphaNumeric":"F4mmpuSRDI",
    "uuid":"1f04040f-fc6c-4de0-a17f-c588d1b62e75"
     },
    "primatives": {
    "active": false,
    "rand-long": 8886422858603719071,
    "rand-long-min": 4635399365989710039,
    "rand-long-range": 6934933,
    "rand-int": 433941228,
    "rand-int-min": 519082863,
    "rand-int-range": 17,
    "rand-double": 7.339790593356424E307,
    "rand-double-min": 1.7261947151579352E308,
    "rand-double-range": 11.0806
     },
    "dates": {
    "rand-date":"1996-07-18T13:50Z",
    "min-date":"2015-03-09T13:50Z",
    "range-date":"2015-03-07T13:50Z",
    "now":"2015-04-28T13:50Z",
    "nowTimestamp": 1430250600027,
    "5days-ago":"2015-04-23T13:50Z",
    "timestamp": 1425588600027
     },
    "literals": {
    "literal-bool": true,
    "literal-int": 34,
    "literal-long": 897789789574389,
    "literal-double": 45.33
     },
    "references": {
    "after-5days-ago":"2015-04-24T13:50Z",
    "isItActive": false
     },
    "counters": {
    "counter1": 0,
    "counter2": 0,
    "counter2-inc": 1
     },
    "randomIncrementLongs": {
    "randomIncrementLong1":"1"
    "randomIncrementLong2":"0"
     },
    "array": [{
    "thing":"Psu"
     }, {
    "thing2":"yoU"
     }, {
    "thing3": true
     }, {
    "thing4":"job"
     }],
    "repeat-array": [{
    "thing1":"red",
    "thing2":"blue"
     }, {
    "thing1":"blue",
    "thing2":"blue"
     }, {
    "thing1":"blue",
    "thing2":"red"
     }]
    }


    文章标签:数据  str  Generator  generic  rand  随机  Robust  random-js  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语