1

在我的应用程序中,我需要查询核心数据,我有一个表,其中包含一个存储 json 字符串的字段。现在我需要在该表中查询在该字段中具有特定键值对的任何条目。我已经尝试使用 LIKE 表达式来解决这个问题,但由于 WILDCARDS DO MATCH THE NEWLINE 这并不顺利。现在我一直在弄清楚我必须在 MATCHES 操作中使用哪个正则表达式。

值的键和子字符串是已知的,我只需要找到包含它们的条目,仅此而已:)

4

2 回答 2

1

用正则表达式解决它:

    for(NSString* value in values)
{
    if(value.length > 0)
    {
        if(i > 0)
        {
            [query appendString:@" OR "];

        }
        [query appendFormat:@" (json_data MATCHES[c] '.*?\"%@\\\":\\\"([^\"]*)%@([^\"]*)\".*?')",key,value];
        i++;
    }

}
于 2012-05-29T08:47:41.593 回答
1

您可以向该实体写入一个 getter 属性,它只返回一个普通字符串而不是 json 字符串,例如:

- (NSString *)stringRepresentation
{ 
  NSError *error = nil; 
  NSData* data=[self.jsonStringProperty dataUsingEncoding:NSUTF8StringEncoding];
  NSString *string = [JSONObjectWithData:data options:0 error:&error];
  if (error) {
   ... // error handling
  }
  return string;
}

然后您可以在该属性上使用带有 LIKE 表达式的查询

于 2012-05-25T15:27:22.323 回答