1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
#include "buffer.h"
#include "copy_stream.h"
#include <json-parser/json.h>
#include "json_aux.h"
#include <assert.h>
#include <string.h>
const char json_type_str[][10] = {
"NONE",
"OBJECT",
"ARRAY",
"INTEGER",
"DOUBLE",
"STRING",
"BOOLEAN",
"NULL",
};
json_value *jsonA_getname (json_value *object, const char *name, json_type t)
{
json_value *val = jsonA_getname_raw(object, name);
if(!val || !jistype(val, t)) {
return NULL;
} else {
return val;
}
}
json_value *jsonA_getname_raw (json_value *object, const char *name)
{
unsigned int i;
assert(object->type == json_object);
for (i = 0; i < object->u.object.length; i++) {
if (strcmp(name, object->u.object.values[i].name) == 0) {
return object->u.object.values[i].value;
}
}
return NULL;
}
int jsonA_escapestring(buffer_t *B, const char *str)
{
for (; *str; str++) {\
switch (*str) {\
case '/':
if (buffer_putliteral(B, "\\/") == -1) return -1;
break;
case '\\':
if (buffer_putliteral(B, "\\\\") == -1) return -1;
break;
case '\"':
if (buffer_putliteral(B, "\\\"") == -1) return -1;
break;
case '\b':
if (buffer_putliteral(B, "\\b") == -1) return -1;
break;
case '\f':
if (buffer_putliteral(B, "\\f") == -1) return -1;
break;
case '\n':
if (buffer_putliteral(B, "\\n") == -1) return -1;
break;
case '\r':
if (buffer_putliteral(B, "\\r") == -1) return -1;
break;
case '\t':
if (buffer_putliteral(B, "\\t") == -1) return -1;
break;
default:
if (buffer_putfstring(B, "%c", (int)*str) == -1) return -1;
break;
}
}
return 0;
}
json_value *jsonA_parse_file(const char *path) {
size_t size;
char *buffer;
if(copy_file_to_buffer(path, &buffer, &size) < 1)
return NULL;
json_value *J = json_parse(buffer, size);
free(buffer);
return J;
}
/* vim: set noexpandtab tabstop=4: */
|