export default (function () { return { parseJSON: function parseJSON(data, source, store) { var subject, predicate, object; var bnodes = {}; var why = store.sym(source); for (var x in data) { if (x.indexOf('_:') === 0) { if (bnodes[x]) { subject = bnodes[x]; } else { subject = store.bnode(x); bnodes[x] = subject; } } else { subject = store.sym(x); } var preds = data[x]; for (var y in preds) { var objects = preds[y]; predicate = store.sym(y); for (var z in objects) { var obj = objects[z]; if (obj.type === 'uri') { object = store.sym(obj.value); store.add(subject, predicate, object, why); } else if (obj.type === 'BlankNode') { if (bnodes[obj.value]) { object = bnodes[obj.value]; } else { object = store.bnode(obj.value); bnodes[obj.value] = object; } store.add(subject, predicate, object, why); } else if (obj.type === 'Literal') { // var datatype if (obj.datatype) { object = store.literal(obj.value, undefined, store.sym(obj.datatype)); } else if (obj.lang) { object = store.literal(obj.value, obj.lang); } else { object = store.literal(obj.value); } store.add(subject, predicate, object, why); } else { throw new Error('error: unexpected termtype: ' + z.type); } } } } } }; })();