cJSON output error

Use NRF52840 and SDK_17.1.0.

Input:

memcpy(gps_location.la,"12.345",6);
memcpy(gps_location.lo,"678.345",7); 

void test_json()
{
  wifi_scan.index = 0;
  memcpy(gps_location.la,"12.345",6); 
  memcpy(gps_location.lo,"678.345",7); 
  memcpy(ap_info[wifi_scan.index].mac,"12:34:56:78:90:ab",17);
  memcpy(ap_info[wifi_scan.index].rssi,"-99",3);
  wifi_scan.index++;
  memcpy(ap_info[wifi_scan.index].mac,"ff:ff:ff:ff:ff:ff",17);
  memcpy(ap_info[wifi_scan.index].rssi,"-9",2);
  wifi_scan.index++;
  memcpy(lte_msg.cid,"123456",6); 
  memcpy(lte_msg.lac,"abcdef",6); 
}

Output:

"la": 12.345000256,
"lo": 678.344970688,

This is code:

47004.ble_app_uart.zip

Parents
  • supplement:

    Print the above log code.

    void json_config_result_objects(void)
    {
        cJSON *root = NULL ,*param = NULL;
        float ftem;
        int item;
        data_to_json();
        memset( json_result, 0, sizeof(json_result) );
        root = cJSON_CreateObject();
        ftem = atof(json_data.gps.la);
        cJSON_AddNumberToObject( root ,"la" , ftem ); 
        ftem = atof(json_data.gps.lo);   
        cJSON_AddNumberToObject( root ,"lo" , ftem );
        ftem = 0.00;
        cJSON_AddNumberToObject( root ,"pr" , ftem );
        cJSON_AddItemToObject( root ,"wifi", param = cJSON_CreateObject() );
        for( uint8_t i=0; i<json_data.scan.index; i++ )
        {
            cJSON_AddStringToObject( param ,"m", json_data.wifi[i].mac  );
            //item = atoi(json_data.wifi[i].rssi);
            //cJSON_AddNumberToObject( param ,"s", item );
        }
    
        cJSON_AddStringToObject( root ,"bat" , "00.0" );
        cJSON_AddStringToObject( root ,"st" , "00.0" );
        cJSON_AddStringToObject( root ,"fw" , "00.0" );
        cJSON_AddStringToObject( root ,"cid" , json_data.lte.cid );
        cJSON_AddStringToObject( root ,"lac" ,json_data.lte.lac );
        cJSON_AddStringToObject( root ,"chg" , "00" );
        cJSON_AddStringToObject( root ,"ev" , "00" );
        char *objects = cJSON_Print(root);
        memcpy( json_result, objects, strlen(objects) );
        NRF_LOG_INFO( "%s", json_result );
        cJSON_Delete(root);
        cJSON_free(objects);
    }

Reply
  • supplement:

    Print the above log code.

    void json_config_result_objects(void)
    {
        cJSON *root = NULL ,*param = NULL;
        float ftem;
        int item;
        data_to_json();
        memset( json_result, 0, sizeof(json_result) );
        root = cJSON_CreateObject();
        ftem = atof(json_data.gps.la);
        cJSON_AddNumberToObject( root ,"la" , ftem ); 
        ftem = atof(json_data.gps.lo);   
        cJSON_AddNumberToObject( root ,"lo" , ftem );
        ftem = 0.00;
        cJSON_AddNumberToObject( root ,"pr" , ftem );
        cJSON_AddItemToObject( root ,"wifi", param = cJSON_CreateObject() );
        for( uint8_t i=0; i<json_data.scan.index; i++ )
        {
            cJSON_AddStringToObject( param ,"m", json_data.wifi[i].mac  );
            //item = atoi(json_data.wifi[i].rssi);
            //cJSON_AddNumberToObject( param ,"s", item );
        }
    
        cJSON_AddStringToObject( root ,"bat" , "00.0" );
        cJSON_AddStringToObject( root ,"st" , "00.0" );
        cJSON_AddStringToObject( root ,"fw" , "00.0" );
        cJSON_AddStringToObject( root ,"cid" , json_data.lte.cid );
        cJSON_AddStringToObject( root ,"lac" ,json_data.lte.lac );
        cJSON_AddStringToObject( root ,"chg" , "00" );
        cJSON_AddStringToObject( root ,"ev" , "00" );
        char *objects = cJSON_Print(root);
        memcpy( json_result, objects, strlen(objects) );
        NRF_LOG_INFO( "%s", json_result );
        cJSON_Delete(root);
        cJSON_free(objects);
    }

Children
Related