LINUX.ORG.RU

Сохранение в JSON файл


0

1

Доброе время суток! Подскажите пожалуйста: у меня имеется JSON-файл вида:

{"n": "0001","n_mag": "0", "n_tool": "1","ti": "1",  "name_tool": "резец Л. проходной", "n_p": "1", "sm1": "-800.003", "sm2": "0.003","sm3": "10.000", "sm4":"0", "sm5":"0", "sm6":"0", "sm7":"0", "sm8":"0", "ri": "100.000", "ki":"L", "hi":"100.000", "ai":"60", "wi": "30.000", "mm": "3", "m8": "1"},
 {"n": "0002","n_mag": "0", "n_tool": "2","ti": "2", "name_tool": "резец П. проходной", "n_p": "1", "sm1": "-300.003", "sm2": "-100.003","sm3": "0.000", "sm4":"0", "sm5":"0", "sm6":"0", "sm7":"0", "sm8":"0", "ri": "5.000", "ki":"P", "hi":"50.000", "ai":"31", "wi": "20.000", "mm": "2", "m8": "1"},
 {"n": "0003","n_mag": "0", "n_tool": "2","ti": "2", "name_tool": "резец П. проходной", "n_p": "1", "sm1": "-300.003", "sm2": "-100.003","sm3": "0.000", "sm4":"0", "sm5":"0", "sm6":"0", "sm7":"0", "sm8":"0", "ri": "6.000", "ki":"P", "hi":"51.000", "ai":"32", "wi": "30.000", "mm": "1", "m8": "1"},
 .............................................
 {"n": "0024","n_mag": "0", "n_tool": "5","ti": "0", "name_tool": "Отрезной", "n_p": "1", "sm1": "-300.003", "sm2": "-100.003","sm3": "0.000", "sm4":"0", "sm5":"0", "sm6":"0", "sm7":"0", "sm8":"0", "ri": "7.000", "ki":"P", "hi":"52.000", "ai":"33", "wi": "35.000", "mm": "4", "m8": "3"}]

Загружаю данные следующим образом:

void tool_init(void)
{

	char buf[255];

	    json_error_t error;
		tool_nodes_arr=malloc(TOOL_MAX_AMOUNT * sizeof(struct tool_node_t));
	    snprintf(buf, sizeof(buf), "%s", "../tools/param_tool.json");
	    json_doc.fd = json_load_file(buf, 0, &error);
	    if (!json_doc.fd) {
	        fprintf(stderr, "%d %d %d\n%s\n", error.line,
	                                          error.column,
	                                          error.position,
	                                          error.text);
	        exit(1);
	    }

	int i;

    json_t *value;
    json_t *object;
    int len;
    char current_group = '0';

    const char *raw_index;
int index=1;
len_json_file =len = json_array_size(json_doc.fd);

    for(i = 0; (i < len);  i++) {
        value = json_array_get(json_doc.fd, i);
//#№
        object = json_object_get(value, "n");
        raw_index = json_string_value(object);
        tool_nodes_arr[i].n = index = atoi(raw_index);
//#mag
        object = json_object_get(value, "n_mag");
        tool_nodes_arr[i].n_mag =atoi(json_string_value(object));
................
Затем произвожу нужные мне манипуляции и теперь нужно пересохранить этот файл. Использую jansson.h. Подскажите пожалуйста как реализовать сохранение или в каком направлени копать. С json-файлами до этого не работал, поиск вменяемой документации не дал результатов. Спасибо.

Ответ на: комментарий от stevejobs

еще в бусте есть Property_tree для JSON и XML, который достаточно удобный, имхо.

но ТС вроде-как на Си пишет.

TakeOver ()
Ответ на: комментарий от SherKhan

Сделал ф-цию сохранения:

void save_tool(){
	    json_t *value=json_array();;
	    json_t *arr=json_array();
	    int i;
	char buf[255];

    for(i = 0; i < len_json_file;  i++) {
    	//json_array_set

    	json_t *object= json_object();
    	json_array_set(arr,i,value);
	    json_object_set_new(object,"name_tool",json_string_value(tool_nodes_arr[i].name));



    	json_array_append(arr,object);



    }
    snprintf(buf, sizeof(buf), "%s", "../tools/param_tool2.json");
            json_dump_file(arr,buf,0);
printf("\nSave OK\n");
}// exit save_tool
[\code]
Но объект он почему-то не выбирает, в сохраненном файле лишь:
[{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
Подскажите пожалуйста, в чем моя ошибка?

red_byte ()
Ответ на: комментарий от red_byte

Все! Разобрался. Если кому интересно, вот код:

void save_tool(){
	    json_t *value;
	    json_t *arr=json_array();
	    int i;
	char buf[255];
    for(i = 0; i < len_json_file;  i++) {
    	json_t *object= json_object();
     	json_object_set(object,"name_tool",json_string(tool_nodes_arr[i].name));
	    json_array_append(arr,object);

    }
    snprintf(buf, sizeof(buf), "%s", "../tools/param_tool2.json");
            json_dump_file(arr,buf,0);
printf("\nSave OK\n");
}// exit save_tool

red_byte ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.