cf-jsmn 0.3.0

cf-jsmn 0.3.0

测试已测试
语言语言 CC
许可证 MIT
发布上次发布2021年8月

Micha MazaheriŽymantas Paulas 维护。



cf-jsmn 0.3.0

这是一个与 Core Foundation 兼容的轻量级 JSON 解析器 jsmn 的版本,支持 Unicode 字符串。

安装

cf-jsmn 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

pod "cf-jsmn"

例子

// init the jsmn parser
jsmn_parser parser;
jsmn_init(&parser);
unsigned int numTokens = 65536; // an arbitrary size to start with
jsmntok_t* tokens = malloc(sizeof(jsmntok_t) * numTokens);

// get an "inline buffer" of UniChar from the CFString
CFIndex length = CFStringGetLength((__bridge CFStringRef)string);
CFStringInlineBuffer inlineBuffer;
CFStringInitInlineBuffer((__bridge CFStringRef)string, &inlineBuffer, CFRangeMake(0, length));

// loop until we have the right amount of tokens
while (YES) {

  // Parse
  jsmnerr_t error = jsmn_parse(&parser, &inlineBuffer, length, tokens, numTokens);

  // In no error, we're good
  if (error == JSMN_SUCCESS) {
    break;
  }
  // If not enough memory, realloc twice bigger
  else if (error == JSMN_ERROR_NOMEM) {
    numTokens *= 2;
    tokens = realloc(tokens, sizeof(jsmntok_t) * numTokens);
  }
  // If another error, fail
  else {
    // fail gracefully...
    break;
  }
}

// Loop over tokens
for (unsigned int i = 0; i < parser.toknext; i++) {

  int tk_start = tokens[i].start;
  int tk_end = tokens[i].end;
  NSRange range = NSMakeRange(tk_start, tk_end - tk_start);

  switch (tokens[i].type) {
    case JSMN_PRIMITIVE:
      break;
    case JSMN_STRING:
      break;
    case JSMN_OBJECT:
      break;
    case JSMN_ARRAY:
      break;
  }
}

许可证

本软件以 MIT 许可证 发布,因此您可以将它集成到您的商业产品中。