SDJSONPrettyPrint 0.0.1

SDJSONPrettyPrint 0.0.1

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最近发布2014年12月

未声明 维护。



  • 作者
  • Tyrone Trevorrow

SDJSONPrettyPrint - 慢速 JSON 序列化器

SDJSONPrettyPrint 将兼容 Foundation 的对象树转换成 JSON 字符串。它不是设计成快速且可生产的 JSON 序列化器,对于这个目的,你可能需要 JSONKitSDJSONPrettyPrint 专注于生成尽可能人性化的 JSON,您可以用它来进行日志记录或调试。

目的

目前有大量的Objective-C JSON 序列化器,包括一个非常好的内置序列化器,它会产生完全合法的 JSON 字符串,主要是为机器使用。这些解决方案中的大部分忽略了——或者有其他有限的解决方案——为人类阅读的输出生产。这对于日志记录来说是一项重要特性,因为在开发复杂 API 的庞大系统时,在开发过程中,将会进行数千个 API 请求和响应。其中许多将由程序员手动检查,以确保应用程序正确地与 API 交互。本项目旨在生成便于阅读的 JSON 输出,格式优雅,且以最不易让人沮丧的方式展示数据。

示例

请考虑以下经过机器格式化的 JSON 示例

{"function":null,"numbers":[4,8,15,16,23,42],"y_index":2,"x_index":12,"z_index":5,"arcs":[{"p2":[22.1,50],"p1":[10.5,15.5],"radius":5},{"p2":[23.1,40],"p1":[11.5,15.5],"radius":10},{"p2":[23.1,30],"p1":[12.5,15.5],"radius":3},{"p2":[24.1,20],"p1":[13.5,15.5],"radius":2},{"p2":[25.1,10],"p1":[14.5,15.5],"radius":8},{"p2":[26.1,0],"p1":[15.5,15.5],"radius":2}],"label":"my label"}

如果您通过 NSJSONSerialization 并且启用了 NSJSONWritingPrettyPrinted 来运行此操作,它将产生

{
  "function" : null,
  "numbers" : [
    4,
    8,
    15,
    16,
    23,
    42
  ],
  "y_index" : 2,
  "x_index" : 12,
  "z_index" : 5,
  "arcs" : [
    {
      "p2" : [
        22.1,
        50
      ],
      "p1" : [
        10.5,
        15.5
      ],
      "radius" : 5
    },
    {
      "p2" : [
        23.1,
        40
      ],
      "p1" : [
        11.5,
        15.5
      ],
      "radius" : 10
    },
    {
      "p2" : [
        23.1,
        30
      ],
      "p1" : [
        12.5,
        15.5
      ],
      "radius" : 3
    },
    {
      "p2" : [
        24.1,
        20
      ],
      "p1" : [
        13.5,
        15.5
      ],
      "radius" : 2
    },
    {
      "p2" : [
        25.1,
        10
      ],
      "p1" : [
        14.5,
        15.5
      ],
      "radius" : 8
    },
    {
      "p2" : [
        26.1,
        0
      ],
      "p1" : [
        15.5,
        15.5
      ],
      "radius" : 2
    }
  ],
  "label" : "my label"
}

这略微好了一些,但实际上它只是添加了一堆空白来填充垂直空间。它会无条件地为数组中的每个元素添加新行,并且打印 JSON 对象中的键的顺序似乎是相当随意的。令人惊讶的是,“label”键位于巨大的对象数组“arcs”之下,这意味着它很容易被忽略。

JSONKit 是一个备受尊敬的 JSON 解析和序列化库,被许多应用程序在生产中使用。类似于 NSJSONSerialization,它有一个美化打印模式。当通过它运行此示例 JSON 时,它将产生

{
  "arcs": [
    {
      "p1": [
        10.5,
        15.5
      ],
      "p2": [
        22.100000000000001,
        50
      ],
      "radius": 5
    },
    {
      "p1": [
        11.5,
        15.5
      ],
      "p2": [
        23.100000000000001,
        40
      ],
      "radius": 10
    },
    {
      "p1": [
        12.5,
        15.5
      ],
      "p2": [
        23.100000000000001,
        30
      ],
      "radius": 3
    },
    {
      "p1": [
        13.5,
        15.5
      ],
      "p2": [
        24.100000000000001,
        20
      ],
      "radius": 2
    },
    {
      "p1": [
        14.5,
        15.5
      ],
      "p2": [
        25.100000000000001,
        10
      ],
      "radius": 8
    },
    {
      "p1": [
        15.5,
        15.5
      ],
      "p2": [
        26.100000000000001,
        0
      ],
      "radius": 2
    }
  ],
  "function": null,
  "label": "my label",
  "numbers": [
    4,
    8,
    15,
    16,
    23,
    42
  ],
  "x_index": 12,
  "y_index": 2,
  "z_index": 5
}

这略微好了一些,因为它至少按可预测的方式——虽然有点无用——对键进行了排序:字母顺序。它仍然存在无选择地添加新行并在简单值之前放置具有大型 JSON 结构的大型值的问题,这使得数据容易忽视。

以下是从 SDJSONPrettyPrint 生成的输出。

{
  "label": "my label",
  "x_index": 12,
  "y_index": 2,
  "z_index": 5,
  "numbers": [4, 8, 15, 16, 23, 42],
  "function": null,
  "arcs": [
    {
      "radius": 5,
      "p1": [10.5, 15.5],
      "p2": [22.1, 50]
    },
    {
      "radius": 10,
      "p1": [11.5, 15.5],
      "p2": [23.1, 40]
    },
    {
      "radius": 3,
      "p1": [12.5, 15.5],
      "p2": [23.1, 30]
    },
    {
      "radius": 2,
      "p1": [13.5, 15.5],
      "p2": [24.1, 20]
    },
    {
      "radius": 8,
      "p1": [14.5, 15.5],
      "p2": [25.1, 10]
    },
    {
      "radius": 2,
      "p1": [15.5, 15.5],
      "p2": [26.1, 0]
    }
  ]
}

性能

"慢速 JSON 序列化器",它究竟有多慢呢?

非常慢。

Benchmarks

什么是 SDJSONPrettyPrint

  • 一个关注可读输出的 JSON 字符串序列化器。
  • 适合调试和日志记录。
  • 一个 JSON 可视化机制。

什么不是 SDJSONPrettyPrint

  • 一个生产就绪的 JSON 序列化器。在您的生产构建中,它可能应该被 禁用,但由于它不含有任何私有 API,它完全适合 App-Store。
  • 快速、可靠或严格。
  • 一个 JSON 验证器。您最好使用 NSJSONSerialization 进行此项操作。实际上,SDJSONPrettyPrint 还使用 NSJSONSerialization 对 JSON 对象进行内部正确性检查,所以您绝对不 使用这个类在这方面更优越。
  • 一个 JSON 解析器。同样,有许多出色的 JSON 解析器,我绝对做不出比它们更好的工作。

要求

  • 自动引用计数。
  • Mac OS X >= 10.7 或 iOS >= 5.0。如果您安装了 AnyJSON,它可能 可能 在较旧版本的系统中运行,但这尚未经过测试。
  • 可选:CocoaPods。

安装

  1. 推荐:CocoaPods。

    pod 'SDJSONPrettyPrint'
    
  2. 手动。将 SDJSONPrettyPrint.hSDJSONPrettyPrint.m 文件复制到您的项目中。它不会打扰其他东西,不需要除 Foundation 之外的其他框架,也不实现任何分类。

许可

SDJSONPrettyPrint 在 MIT 许可下发布。

版权所有 (c) 2013, Tyrone Trevorrow

在此,免费许可任何人获得此软件及其相关文档文件(“软件”),在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向提供软件的人员做上述操作,但受以下条件约束

上述版权声明和本许可声明应包含在所有副本或主要部分中的软件中。

软件按“原样”提供,不提供任何形式的质量保证,无论明示或暗示的,包括但不限于适销性、适用于特定用途和非侵权性保证。在无论任何情况下,无论因合同、侵权或其他责任而引起的索赔、损害或其他责任,作者或版权持有者均不对任何索赔、损害或其他责任承担责任,无论是因软件或其使用或以其他方式产生。