在大型 JSON 文件中查找文本
Finding text in a large Json file
>我有一个看起来像这样的 JSON 文件
{
"ID": "4",
"samples": [
{
"value": 2000,
"timeStamp": "1"
},
{
"value": 2000,
"timeStamp": "2"
},
{
"value": 2000,
"timeStamp": "3"
},
{
"value": 2000,
"timeStamp": "4"
},
{
"value": 2000,
"timeStamp": "5"
},
{
"value": 2000,
"timeStamp": "6"
},
{
"value": 2000,
"timeStamp": "7"
},
{
"value": 2000,
"timeStamp": "8"
},
{
"value": 2000,
"timeStamp": "9"
},
{
"value": 2000,
"timeStamp": "10"
},
{
"value": 2000,
"timeStamp": "11"
},
{
"value": 2000,
"timeStamp": "12"
},
{
"value": 2000,
"timeStamp": "13"
},
{
"value": 2000,
"timeStamp": "14"
},
{
"value": 2000,
"timeStamp": "15"
},
{
"value": 2000,
"timeStamp": "16"
},
{
"value": 2000,
"timeStamp": "17"
}
]
}
此示例数组可能非常大。我需要找到任何给定timestamp
的value
.由于 JSON 文件可能很大,我无法将其所有文件内容加载到主内存中并使用 rapidjson
或其他 JSON C++库对其进行解析。
我尝试使用mmap
函数打开它并获取指向文件开头的指针。但问题是 如何到达特定timestamp
并获得value
. Timestamp
始终按排序顺序出现。对庞大的字符数组进行线性搜索并不节省时间。可能是二进制搜索可以工作,但我不知道如何应用这些数据。
任何其他技术,如文件偏移缓存或其他东西也可以提供帮助。
JSON 文件的格式为文本。
如果您的文件太大,请按照您使用二进制搜索的建议手动执行。首先,找出文件大小,第一个timeStamp
和最后一个timeStamp
的值。然后只需将文件读取指针定位到文件的中间,然后逐个字符读取字符,直到找到{
并从该点读取您的value
并timeStamp
。然后,根据您阅读timeStamp
,您可以决定需要继续"二进制"搜索的方向。
rapidjson 支持 sax 解析。 这不会完全加载到内存中,并且比解析文本更有意义。
要么自己解析文本文件(如果可以针对非常特定的格式进行优化,可能会更快(,要么搜索流式 JSON 解析库。 然后在找到所需的元素时脱离解析器。
(请注意,对于堆栈溢出来说,请求推荐这样的库显然是题外话(。
相关文章:
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 如何从文本文件中查找最常见的字母和出现次数?
- 在文本中查找半个单词"ABBA"的问题
- 在C++中查找文本中的模式
- 创建程序以从给定的.txt文件中查找文本,替换并计算单词
- 如何创建一个函数,该函数在文本中查找单词的匹配项,包括跳过
- 在大型 JSON 文件中查找文本
- 尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置
- 文本文件中的电话号码查找
- 如何在没有分隔符的大文本文件中查找所有字典单词
- C++查找文本和计数出现次数
- 在文本文件 C++ 中查找( ")
- Visual Studio,在(解决方案资源管理器的)某个筛选器内的所有文件中查找/替换文本
- 查找字符在标准输入文本中出现的次数
- 如何将文本(诗歌)拆分为行(字符串/字符[])并查找每个行的最后一个单词
- 文本处理以查找字符串的共存
- 查找文本文件中的行数,并使用此维度构造数据点
- 在Qt5/C++中向后查找文本文件(尾随文件)
- 如何在c++中查找文本文件中的特定单词?
- 查找文本"space"值(以像素为单位)