我需要在JSON对象中使用很小的双打。数组的输出类似于:
{"array":[[1,0.050000],[2,0.030000]...]}
我正在使用的代码是:
json_object *jobj = json_object_new_object();
json_object *jarray1 = json_object_new_array();
json_object *jarray2 = json_object_new_array();
...
// in a for loop:
json_object *int0 = json_object_new_int (integer_num);
json_object *db0 = json_object_new_double (double_num);
json_object_array_add(jarray1, int0);
json_object_array_add(jarray1, db0);
json_object_array_add(jarray2, jarray1);
...
json_object_object_add(jobj,"array", jarray2);
使用上面显示的数字可以正常工作。问题是当数字较小时,例如1.6E-10,输出为:
{"array":[[1,0.000000],[2,0.000000]...]}
因此与发送“ 0”相同,这是不希望的。我试过将double转换为text:
sprintf(str,"%.15f", double_num);
db0 = json_object_new_string(str);
但是输出是:
{"array":[[1,"0.000000000093575"],[2,"0.000000000091282"]...]}
,我需要删除那些引号。有没有其他方法可以增加输出数组中的小数位数或使用科学计数法(1.6E-10)?
答案 0 :(得分:0)
通过使用此函数格式化我的double,我遇到了类似的问题。
#include <json.h>
struct json_object* json_object_new_double_fmt(double d, const char *fmt)
{
char tmp[128];
snprintf(tmp, 128, fmt, d);
return(json_object_new_double_s(d, tmp));
}
例如:
json_object_object_add(jobjPressure, "Pr", json_object_new_double_fmt((double) pressuredata->pressure, "%0.3f"));
我看不到为什么'json_object_new_double_s()'需要第一个double参数,因为第二个char字符串似乎只是按原样使用。不知道这是一个错误还是我对该功能的错误使用。但是我找不到任何有意义的文档或示例代码。似乎可以完成这项工作。