I'm trying to store an array of JSON objects like this as a single field value in a couchdb document (I have reformatted this field value with JSONLint for readability)
[
{
"identifier": "2208879208",
"name": "Some name",
"description": [
"Lorem ipsum dolor sit amet, consectetur adipiscing elit."
],
"attractions": [
{
"identifier": "1910",
"summaryTitle": "Some title"
},
{
"identifier": "1270",
"summaryTitle": "Another title"
}
]
},
{
"identifier": "2208879208",
"name": "Some name",
"description": [
"Lorem ipsum dolor sit amet, consectetur adipiscing elit."
],
"attractions": [
{
"identifier": "1910",
"summaryTitle": "Some title"
},
{
"identifier": "1270",
"summaryTitle": "Another title"
}
]
}
]
The original data is from a Solr query, which I then send to couchDB with Mickael Bailly's CodeIgniter couchdb library, on PHP 5.3, and apache 2.2.22, couchDB 1.3.0 on Windows 8 WAMPserver
It's valid JSON according to JSONLint, and I can create the document fine, but when I view the document in Futon, couchdb seems to have treated it like a string rather than an array of objects, and I'm unable to click the + signs in Futon to expand / contract the nodes within the saved field UNTIL I double click the field value to edit the source, and add a space between the first 2 chars [ { and then click the tick again.
It then displays in a clickable tree view, and I can read the doc field out again as JSON.
So I guess my question is - What am I missing when I create my couch document? Do I need to format the field data differently?
CouchDB seems to treat this field just as a string value when I create the document, which I find odd. I've tried adding the space in manually before I send the data to couch but I get the same result.
I've also tried using cURL manually to create the document (outside of the couchdb library) but I get exactly the same result and I'm stumped. Any tricks or tips would be much appreciated! I can't find anyone with a similar issue so I'm thinking I must have a basic misunderstanding here :s
$payload = json_encode($data_a);
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:5984/dbname/'.$uid);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json','Accept: */*'));
curl_setopt($ch, CURLOPT_USERPWD, 'user:pass');
$response = curl_exec($ch);
curl_close($ch);