[PD] Nestable Dictionaries in Pd

João Pais jmmmpais at gmail.com
Wed Sep 8 09:26:22 CEST 2021


is jmmmp/cellblock a model of what you could use? but adapted to lists 
and maybe not so complex?

I tried opening your first example in [text]. As I thought, the issue is 
that commas are already reserved in pd for line changes. The output is 
this (I added a line number at the start of each line) when using 
carriage returns:

print:  0 {
print:  1 "cols" : 3
print: 2
print:  3 "data" : {
print:  4 "entry-0" : [ -0.06755
print:  5 0.44185
print:  6 -0.33835 ]
print: 7
print:  8 "entry-1" : [ -0.12305
print:  9 -0.24085
print:  10 0.31295 ]
print: 11
print:  12 "entry-2" : [ -0.0595
print:  13 -0.2881
print:  14 0.0597 ]
print:  15 }
print: 16
print:  17 }
print: 18

Or this without them:

print:  0 { "cols" : 3
print:  1 "data" : { "entry-0" : [ -0.06755
print:  2 0.44185
print:  3 -0.33835 ]
print:  4 "entry-1" : [ -0.12305
print:  5 -0.24085
print:  6 0.31295 ]
print:  7 "entry-2" : [ -0.0595
print:  8 -0.2881
print:  9 0.0597 ] } }
print: 10

which makes it a bit hard to read json files without some hacking, as 
all those commas create a new line. Unless there is another method, is 
it better to code your own json interpreter?

One advantage of [text] is that it can be used to declare data 
structures directly - examples might be in my tutorial, I'm not sure 
anymore how far I got with it.

Files are attached.

Joao

> Thanks for the quick reply!
>
> 2 use-cases.
>
> 1- we can generate or retrieve a dataset's content to use natively in the creative coding environment (Max Pd Sc) so that it integrates in other workflows of data mangling and drawing. We already have in our dataset object file support and single point entry and query but this allow batch dump and load. The structure is:
>
> {
> 	"cols" : 3,
> 	"data" : 	{
> 		"entry-0" : [ -0.06755, 0.44185, -0.33835 ],
> 		"entry-1" : [ -0.12305, -0.24085, 0.31295 ],
> 		"entry-2" : [ -0.0595, -0.2881, 0.0597 ]
> 	}
>
> }
>
>
> 2- we can retrieve or set the state of a complex objects. Our object will spit out its internal status ( for instance, a neural net) and we can use the values of its parameters, like below. More interestingly, we can also query its structure and use that information too.
>
> {
> 	"layers" : [ 		{
> 			"activation" : 3,
> 			"biases" : [ -3.076234734727154, 0.772760846709679 ],
> 			"cols" : 2,
> 			"rows" : 1,
> 			"weights" : [ [ 6.015551733036155, -1.826803841455323 ] ]
> 		}
> , 		{
> 			"activation" : 3,
> 			"biases" : [ -0.490600074475542 ],
> 			"cols" : 1,
> 			"rows" : 2,
> 			"weights" : [ [ -3.115116035462417 ], [ -3.969281643687132 ] ]
> 		}
> ]
> }
>
> The key-value nesting is quite powerful for this type of open structure...
>
>> On 7 Sep 2021, at 15:51, Christof Ressi <info at christofressi.com> wrote:
>>
>> Can you give an example of how the data is structured?
>>
>> In which ways are users supposed to interact with the data?
>>
>> Christof
>>
>> On 07.09.2021 16:37, Pierre Alexandre Tremblay wrote:
>>> Dear all
>>>
>>> I am trying to find the most Pd-vanilla-way to interface with our Dataset object in the FluCoMa project. In Max and SuperCollider we use Dictionaries, which are nestable and queryable in powerful programmatic ways, working essentially like interfaces to JSON-like data structures.
>>>
>>> I’ve looked at [struct] but the [set] object does not allow to do symbols and (list of) floats, and [appends] seem to have the same limitations. In all cases, I’m not certain it is the best approach in any cases to create such a list in Pd...
>>>
>>> I wonder how people do it and if I am missing an obvious workflow, especially with nested structures.
>>>
>>> Any pointer (pun intended) welcome
>>>
>>> p

-------------- next part --------------
#N canvas 253 27 402 464 10;
#X obj 13 78 text define \$0-json;
#X msg 13 58 read -c test.json;
#X obj 17 247 text get \$0-json;
#X obj 17 267 list prepend;
#X obj 17 287 list trim;
#X obj 17 307 print;
#X obj 17 227 t f f;
#X msg 23 38 read test.json;
#X obj 110 267 sel 2;
#X text 9 15 1 - open file with or without carriage returns;
#X obj 17 207 f;
#X obj 46 207 + 1;
#X obj 17 167 t b b;
#X obj 64 187 0;
#X obj 17 187 until;
#X obj 17 147 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X text 16 114 2 - click to print the file with a line number at the
start of each line (compare with your original file);
#X obj 44 392 text tolist \$0-json;
#X obj 44 413 print;
#X obj 44 371 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X text 20 337 maybe it helps to export the content as a list for the
processing?;
#X connect 1 0 0 0;
#X connect 2 0 3 0;
#X connect 2 1 8 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 6 0 2 0;
#X connect 6 1 3 1;
#X connect 7 0 0 0;
#X connect 8 0 14 1;
#X connect 10 0 11 0;
#X connect 10 0 6 0;
#X connect 11 0 10 1;
#X connect 12 0 14 0;
#X connect 12 1 13 0;
#X connect 13 0 10 1;
#X connect 14 0 10 0;
#X connect 15 0 12 0;
#X connect 17 0 18 0;
#X connect 19 0 17 0;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.json
Type: application/json
Size: 180 bytes
Desc: not available
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20210908/042378b4/attachment-0001.json>


More information about the Pd-list mailing list