Browse Source Download (without any required ccan dependencies)
json
Parse and generate JSON (JavaScript Object Notation)
Joey Adams
This is a library for encoding and decoding JSON that strives to be easy to learn, use, and incorporate into an application.
JSON (JavaScript Object Notation) facilitates passing data among different programming languages, particularly JavaScript. It looks like this:
[ { "id": 1, "firstname": "John", "lastname": "Smith", "email": "john@example.com", "likes_pizza": false }, { "id": 2, "firstname": "Linda", "lastname": "Jones", "email": null, "likes_pizza": true } ]
#include <ccan/json/json.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
static int find_number(JsonNode *object, const char *name, double *out)
{
JsonNode *node = json_find_member(object, name);
if (node && node->tag == JSON_NUMBER) {
*out = node->number_;
return 1;
}
return 0;
}
static void solve_pythagorean(JsonNode *triple)
{
double a = 0, b = 0, c = 0;
int a_given, b_given, c_given;
if (triple->tag != JSON_OBJECT) {
fprintf(stderr, "Error: Expected a JSON object.\n");
exit(EXIT_FAILURE);
}
a_given = find_number(triple, "a", &a);
b_given = find_number(triple, "b", &b);
c_given = find_number(triple, "c", &c);
if (a_given + b_given + c_given != 2) {
fprintf(stderr, "Error: I need two sides to compute the length of the third.\n");
exit(EXIT_FAILURE);
}
if (a_given && b_given) {
c = sqrt(a*a + b*b);
json_append_member(triple, "c", json_mknumber(c));
} else if (a_given && c_given) {
b = sqrt(c*c - a*a);
json_append_member(triple, "b", json_mknumber(b));
} else if (b_given && c_given) {
a = sqrt(c*c - b*b);
json_append_member(triple, "a", json_mknumber(a));
}
}
int main(void)
{
JsonNode *triples = json_mkarray();
json_append_element(triples, json_decode("{\"a\": 3, \"b\": 4}"));
json_append_element(triples, json_decode("{\"a\": 5, \"c\": 13}"));
json_append_element(triples, json_decode("{\"b\": 24, \"c\": 25}"));
JsonNode *triple;
json_foreach(triple, triples)
solve_pythagorean(triple);
char *tmp = json_stringify(triples, "\t");
puts(tmp);
free(tmp);
json_delete(triples);
return 0;
}
MIT