Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Your question is bigger than the answers received so far. However, for Manipulating JSON, they have all told you about <code>mochijson.erl</code> , <code>mochijson2.erl</code> all of which come with <code>mochiweb</code> HTTP Library. To use them, a JSON Object is represented as a <code>Struct</code> Object like this:</p> <pre> <b>In JSON</b><br> {"FirstName": "Joshua", "Surname": "Muzaaya"}<br> <b>In Erlang</b><br> {struct,[{&lt;&lt;"FirstName"&gt;&gt;,&lt;&lt;"Joshua"&gt;&gt;},{&lt;&lt;"Surname"&gt;&gt;,&lt;&lt;"Muzaaya"&gt;&gt;}]} </pre> <p>To Parse to and Fro: <pre> JSON_DATA = {"students":[<br> {"student_number":45,<br> "details":[{"FirstName": "Joshua", "Surname": "Muzaaya"} ] } ]}<br> <b>From JSON to Erlang</b><br> $&gt; mochijson2:decode(JSON_DATA). {struct,[{&lt;&lt;"students"&gt;&gt;, [{struct,[{&lt;&lt;"student_number"&gt;&gt;,45}, {&lt;&lt;"details"&gt;&gt;, [{struct,[{&lt;&lt;"FirstName"&gt;&gt;,&lt;&lt;"Joshua"&gt;&gt;}, {&lt;&lt;"Surname"&gt;&gt;,&lt;&lt;"Muzaaya"&gt;&gt;}]}]}]}]}]}<br> <b>From Erlang to JSON</b><br> $&gt; mochijson2:encode(StructObject).<br> </pre> Now Databases, i dont know what you really want, but, normally, we can write data in a Key Value store , <code>Mnesia</code> , or <code>CouchDB</code> via a <code>RESTFUL</code> access API. I have written a <code>Couchbase Single Server</code> Client in Erlang. Here are some of the functions inside: <pre> create_database(ServerDomain,DBName)-&gt; try ibrowse:send_req(ServerDomain ++ DBName,[{"Content-Type",<br> "application/json"}],put,[]) of<br> {ok,&#95;,&#95;,Result} -&gt; case proplists:get_value(&lt;&lt;"ok"&gt;&gt;,element(2,mochijson2:decode(Result<br> ))) of undefined -&gt; {error,failed}; &#95; -&gt; ok end; Any -&gt; {error,Any} catch EE:EE2 -&gt; {error,{EE,EE2}} end.<br> delete_database(ServerDomain,DBName)-&gt; try ibrowse:send_req(ServerDomain ++ DBName,[{"Content-Type","application/json"}],delete,[]) of {ok,&#95;,&#95;,Result} -&gt; case proplists:get_value(&lt;&lt;"ok"&gt;&gt;,element(2,mochijson2:decode(Result))) of undefined -&gt; {error,failed}; &#95; -&gt; ok end; Any -&gt; {error,Any} catch EE:EE2 -&gt; {error,{EE,EE2}} end.<br> %% read/3 ::= Struct<br>read(ServerDomain,DBName,DocId)-&gt; try ibrowse:send_req(ServerDomain ++ DBName ++ "/" ++ DocId,[{"Content-Type","application/json"}],get,[]) of<br> {ok,&#95;,&#95;,Result} -&gt; mochijson2:decode(Result);<br> Any -&gt; {error,Any} catch EE:EE2 -&gt; {error,{EE,EE2}} end.<br><br> %% write/3 ::= [{id,Id::string()},{rev,Rev::string()}]<br>write(ServerDomain,DBName,DocStruct)-&gt; try ibrowse:send_req(ServerDomain ++ DBName,[{"Content-Type","application/json"}],post,lists:flatten(mochijson:encode(DocStruct))) of<br> {ok,&#95;,&#95;,Result} -&gt; E = element(2,mochijson2:decode(Result)), case {proplists:get_value(&lt;&lt;"id"&gt;&gt;,E),proplists:get_value(&lt;&lt;"rev"&gt;&gt;,E)} of {undefined,&#95;} -&gt; {error,E}; {&#95;,undefined} -&gt; {error,E}; {Id,Rev} -&gt; [{id,binary_to_list(Id)},{rev,binary_to_list(Rev)}]<br> end;<br> Any -&gt; {error,Any} catch EE:EE2 -&gt; {error,{EE,EE2}} end.<br><br> %% remember to specify the '_rev' of recent copy when updating %% update/4 ::= [{id,Id::string()},{rev,Rev::string()}] update(ServerDomain,DBName,DocId,DocStruct)-&gt; try ibrowse:send_req(ServerDomain ++ DBName ++ "/" ++ DocId,[{"Content-Type","application/json"}],put,lists:flatten(mochijson:encode(DocStruct))) of<br> {ok,&#95;,&#95;,Result} -&gt; E = element(2,mochijson2:decode(Result)), case {proplists:get_value(&lt;&lt;"id"&gt;&gt;,E),proplists:get_value(&lt;&lt;"rev"&gt;&gt;,E)} of {undefined,&#95;} -&gt; {error,E}; {&#95;,undefined} -&gt; {error,E}; {Id,Rev} -&gt; [{id,binary_to_list(Id)},{rev,binary_to_list(Rev)}]<br> end;<br> Any -&gt; {error,Any} catch EE:EE2 -&gt; {error,{EE,EE2}} end.<br><br> %% you need to provide the '_rev' of current copy %% of doc to be deleted<br>delete(ServerDomain,DBName,DocId,Rev)-&gt; try ibrowse:send_req(ServerDomain ++ DBName ++ "/" ++ DocId ++ "?rev=" ++ Rev,[{"Content-Type","application/json"}],delete,[]) of<br> {ok,&#95;,&#95;,Result} -&gt; E = element(2,mochijson2:decode(Result)), case {proplists:get_value(&lt;&lt;"id"&gt;&gt;,E),proplists:get_value(&lt;&lt;"ok"&gt;&gt;,E)} of {undefined,&#95;} -&gt; {error,E}; {&#95;,undefined} -&gt; {error,E}; {&#95;Id,&#95;} -&gt; ok<br> end;<br> Any -&gt; {error,Any} catch EE:EE2 -&gt; {error,{EE,EE2}} end.<br><br> random(ServerDomain,Count) when is_integer(Count)-&gt; try ibrowse:send_req(ServerDomain ++ "_uuids?count=" ++ integer_to_list(Count),[{"Content-Type","application/json"}],get,[]) of {ok,&#95;,&#95;,Result} -&gt; [binary_to_list(Z) || Z &lt;- proplists:get_value(&lt;&lt;"uuids"&gt;&gt;,element(2,mochijson2:decode(Result)))]; Any -&gt; {error,Any} catch EE:EE2 -&gt; {error,{EE,EE2}} end. </pre></p> <p>So, perhaps try breaking down your question. Otherwise, you can see above that i am playing alot with JSON. To use the methods abpve, first make user <code>ibrowse</code> is running. </p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload