C++ 使用sscanf()解析JSON样式的文本

C++ 使用sscanf()解析JSON样式的文本,c++,C++,我需要从这个字符串中解析三个值——一个字符串和三个浮点 sscanf()返回零,可能是格式说明符搞错了 ["STRING", FLOAT, FLOAT, FLOAT], 你知道怎么了吗?请阅读sscanf(3)上的手册页。使用正则表达式时%s格式不匹配,它只扫描非空白字符。即使它按照您的假设工作,您的正则表达式也无法正确处理所有JSON字符串(如果您的输入数据格式受到足够的限制,这可能不是问题,但仍然不干净) 使用合适的JSON解析器。其实并不复杂。我在一个中等复杂的案例中使用了cJSON,您

我需要从这个字符串中解析三个值——一个字符串和三个浮点

sscanf()返回零,可能是格式说明符搞错了

["STRING", FLOAT, FLOAT, FLOAT],

你知道怎么了吗?

请阅读sscanf(3)上的手册页。使用正则表达式时%s格式不匹配,它只扫描非空白字符。即使它按照您的假设工作,您的正则表达式也无法正确处理所有JSON字符串(如果您的输入数据格式受到足够的限制,这可能不是问题,但仍然不干净)


使用合适的JSON解析器。其实并不复杂。我在一个中等复杂的案例中使用了cJSON,您应该能够在几个小时内集成它。

要解决眼前的问题,请使用以下格式说明符:

sscanf(current_line.c_str(), "[\"%s[^\"]\",%f,%f,%f],", 
            &temp_node.id, 
            &temp_node.pos.x, 
            &temp_node.pos.y, 
            &temp_node.pos.z)) 
解析集合的正确语法是
%[…]s
,而不是
%s[…]

也就是说,
sscanf()
不是解析JSON的正确工具。例如,即使是“固定”代码也无法解析包含转义引号的字符串


使用正确的。

%s[
永远不会成功。
%[…]
(不是
%s[]
)是有效的scanf指令。它不是正则表达式。你说得对。使用%[^“]可以处理没有转义引号的简单字符串或其他特殊情况。
"[\"%[^\"]s\",%f,%f,%f],"