{"id":26883673,"url":"https://github.com/jiro4989/nimjson","last_synced_at":"2025-05-08T17:09:35.530Z","repository":{"id":34943961,"uuid":"192662845","full_name":"jiro4989/nimjson","owner":"jiro4989","description":"nimjson generates nim object definitions from json documents.","archived":false,"fork":false,"pushed_at":"2025-01-19T23:52:28.000Z","size":498,"stargazers_count":53,"open_issues_count":3,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-31T17:50:03.512Z","etag":null,"topics":["cli","command","json","lib","library","nim"],"latest_commit_sha":null,"homepage":"https://jiro4989.github.io/nimjson/nimjson.html","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jiro4989.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-19T05:14:12.000Z","updated_at":"2025-01-26T03:22:58.000Z","dependencies_parsed_at":"2025-01-14T18:42:27.380Z","dependency_job_id":null,"html_url":"https://github.com/jiro4989/nimjson","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiro4989%2Fnimjson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiro4989%2Fnimjson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiro4989%2Fnimjson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiro4989%2Fnimjson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jiro4989","download_url":"https://codeload.github.com/jiro4989/nimjson/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253112071,"owners_count":21856070,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command","json","lib","library","nim"],"created_at":"2025-03-31T17:36:37.703Z","updated_at":"2025-05-08T17:09:34.411Z","avatar_url":"https://github.com/jiro4989.png","language":"Nim","readme":"# nimjson\n\nnimjson generates nim object definitions from json documents.\nThis was inspired by [gojson](https://github.com/ChimeraCoder/gojson).\n\n## Development\n\n* Nim (stable version)\n\n## Usage examples (CLI)\n\n`nimjson` writes `NilType` type if a value or a first value of an array is null.\nPlease fix `NilType` type yourself.\n\n### Large JSON\n\n```bash\n% curl -s https://api.github.com/repos/jiro4989/nimjson | nimjson -O:Repository\ntype\n  NilType = ref object\n  Repository = ref object\n    id: int64\n    node_id: string\n    name: string\n    full_name: string\n    private: bool\n    owner: Owner\n    html_url: string\n    description: string\n    fork: bool\n    url: string\n    forks_url: string\n    keys_url: string\n    collaborators_url: string\n    teams_url: string\n    hooks_url: string\n    issue_events_url: string\n    events_url: string\n    assignees_url: string\n    branches_url: string\n    tags_url: string\n    blobs_url: string\n    git_tags_url: string\n    git_refs_url: string\n    trees_url: string\n    statuses_url: string\n    languages_url: string\n    stargazers_url: string\n    contributors_url: string\n    subscribers_url: string\n    subscription_url: string\n    commits_url: string\n    git_commits_url: string\n    comments_url: string\n    issue_comment_url: string\n    contents_url: string\n    compare_url: string\n    merges_url: string\n    archive_url: string\n    downloads_url: string\n    issues_url: string\n    pulls_url: string\n    milestones_url: string\n    notifications_url: string\n    labels_url: string\n    releases_url: string\n    deployments_url: string\n    created_at: string\n    updated_at: string\n    pushed_at: string\n    git_url: string\n    ssh_url: string\n    clone_url: string\n    svn_url: string\n    homepage: string\n    size: int64\n    stargazers_count: int64\n    watchers_count: int64\n    language: string\n    has_issues: bool\n    has_projects: bool\n    has_downloads: bool\n    has_wiki: bool\n    has_pages: bool\n    forks_count: int64\n    mirror_url: NilType\n    archived: bool\n    disabled: bool\n    open_issues_count: int64\n    license: License\n    allow_forking: bool\n    is_template: bool\n    topics: seq[string]\n    visibility: string\n    forks: int64\n    open_issues: int64\n    watchers: int64\n    default_branch: string\n    temp_clone_token: NilType\n    network_count: int64\n    subscribers_count: int64\n  Owner = ref object\n    login: string\n    id: int64\n    node_id: string\n    avatar_url: string\n    gravatar_id: string\n    url: string\n    html_url: string\n    followers_url: string\n    following_url: string\n    gists_url: string\n    starred_url: string\n    subscriptions_url: string\n    organizations_url: string\n    repos_url: string\n    events_url: string\n    received_events_url: string\n    `type`: string\n    site_admin: bool\n  License = ref object\n    key: string\n    name: string\n    spdx_id: string\n    url: string\n    node_id: string\n```\n\n### Simple JSON\n\n```bash\n% nimjson examples/primitive.json\ntype\n  NilType = ref object\n  Object = ref object\n    stringField: string\n    intField: int64\n    floatField: float64\n    boolField: bool\n    nullField: NilType\n\n% nimjson examples/array.json\ntype\n  NilType = ref object\n  Object = ref object\n    strArray: seq[string]\n    intArray: seq[int64]\n    floatArray: seq[float64]\n    boolArray: seq[bool]\n    nullArray: seq[NilType]\n    emptyArray: seq[NilType]\n\n% nimjson examples/object.json\ntype\n  NilType = ref object\n  Object = ref object\n    point: Point\n    length: int64\n    responseCode: string\n    debugFlag: bool\n    rectangles: seq[Rectangles]\n  Point = ref object\n    x: float64\n    y: float64\n  Rectangles = ref object\n    width: int64\n    height: int64\n```\n\n### JSON Schema\n\n`nimjson` supports partially [JSON Schema](https://json-schema.org/understanding-json-schema/index.html).\n`nimjson` generates Nim type definition with JSON Schema when you enable `-j` option.\n\n```bash\n$ nimjson -j examples/json_schema.json\ntype\n  Object = ref object\n    `type`: string\n    id: string\n    timestamp: string\n    stream: string\n    consumer: string\n    consumer_seq: string\n    stream_seq: string\n    deliveries: int64\n    domain: Option[string]\n```\n\nIt is wrapped by default in the `Option` type that properties not included in the `required` parameter of JSON Schema.\nIf you don't want to use `Option` type, you can use `--disable-option-type` option.\n\n```bash\n$ nimjson -j --disable-option-type examples/json_schema.json\ntype\n  Object = ref object\n    `type`: string\n    id: string\n    timestamp: string\n    stream: string\n    consumer: string\n    consumer_seq: string\n    stream_seq: string\n    deliveries: int64\n    domain: string\n```\n\n`nimjson` supports `$ref` and `$defs` keywords.\nBut it doesn't support URL of `$ref`.\n\nThis is supported:\n\n```json\n{\n  \"$id\": \"https://example.com/product.schema.json\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"product\": { \"$ref\": \"#/$defs/product\" },\n    \"product2\": { \"$ref\": \"#/$defs/product2\" }\n  },\n  \"$defs\": {\n    \"product\": { \"type\": \"string\" },\n    \"product2\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } }\n  }\n}\n```\n\nThis is NOT supported:\n\n```json\n{\n  \"$id\": \"https://example.com/product.schema.json\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"product\": { \"$ref\": \"https://example.com/schemas/address\" }\n  }\n}\n```\n\n## Usage examples (API)\n\n```nim\nimport nimjson\n\necho \"\"\"{\"keyStr\":\"str\", \"keyInt\":1}\"\"\".toTypeString()\n\n# Output:\n# type\n#   NilType = ref object\n#   Object = ref object\n#     keyStr: string\n#     keyInt: int64\n\necho \"examples/primitive.json\".readFile().toTypeString(\"testObject\")\n\n# Output:\n# type\n#   NilType = ref object\n#   TestObject = ref object\n#     stringField: string\n#     intField: int64\n#     floatField: float64\n#     boolField: bool\n#     nullField: NilType\n```\n\nJSON Schema:\n\n```nim\nimport nimjson\n\necho \"examples/json_schema.json\".readFile().toTypeString(\"testObject\", jsonSchema = true)\ntype\n  TestObject = ref object\n    `type`: string\n    id: string\n    timestamp: string\n    stream: string\n    consumer: string\n    consumer_seq: string\n    stream_seq: string\n    deliveries: int64\n    domain: Option[string]\n```\n\n## Installation\n\n### Nim users\n\n```bash\nnimble install nimjson\n```\n\n### Linux users (Debian base distros)\n\n```bash\nwget https://github.com/jiro4989/nimjson/releases/download/v3.0.0/nimjson_3.0.0_amd64.deb\nsudo dpkg -i ./nimjson*.deb\n```\n\n### Linux users (RHEL compatible distros)\n\n```bash\nyum install https://github.com/jiro4989/nimjson/releases/download/v3.0.0/nimjson-3.0.0-1.el7.x86_64.rpm\n```\n\n## Help\n\n`nimjson -h`\n\n    nimjson generates nim object definitions from json documents.\n    \n    Usage:\n        nimjson [options] [files...]\n        nimjson (-h | --help)\n        nimjson (-v | --version)\n    \n    Options:\n        -h, --help                       Print this help\n        -v, --version                    Print version\n        -X, --debug                      Debug on\n        -o, --out-file:FILE_PATH         Write file path\n        -O, --object-name:OBJECT_NAME    Set object type name\n        -p, --public-field               Public fields\n        -q, --quote-field                Quotes all fields\n        -j, --json-schema                Read JSON as JSON Schema format\n            --disable-option-type        (Only JSON Schema) Disable using Option type\n\n## License\n\nMIT\n\n## Document\n\n- https://jiro4989.github.io/nimjson/nimjson.html\n\n## Web application of nimjson\n\nI created simple nimjson on web application.\n\nhttps://jiro4989.github.io/nimjson\n\nJavascript library of nimjson of the application is generated by this\nmodule (`nimble js`).\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiro4989%2Fnimjson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjiro4989%2Fnimjson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiro4989%2Fnimjson/lists"}