19
submitted 9 months ago by luthis@lemmy.nz to c/linux@programming.dev

I have a file with content like this:

item({
     ["attr"] = {
        ["size"] = "62091";
        ["filename"] = "qBuUP9-OTfuzibt6PQX4-g.jpg";
        ["stamp"] = "2023-12-05T19:31:37Z";
        ["xmlns"] = "urn:xmpp:http:upload:0";
        ["content-type"] = "image/jpeg";
     };
     ["key"] = "Wa4AJWFldqRZjBozponbSLRZ";
     ["with"] = "email@address";
     ["when"] = 1701804697;
     ["name"] = "request";
});

I need to know what format this is, and if there exists a tool in linux already to parse this or if I need to write one myself?

Thanks!

top 6 comments
sorted by: hot top controversial new old
[-] theit8514@lemmy.world 3 points 9 months ago

This looks like a combination of JSONP and the ES2015 computed property name syntax. JSONP is used to load into web pages using a script tag and execute the function (item) with the data, rather than a direct response from Ajax.

As for tools, jq may be able to parse this assuming you remove the item( and the last );

[-] nybble41@programming.dev 5 points 9 months ago* (last edited 9 months ago)

It's similar, but JavaScript would use : and , for separators rather than = and ;.

This is valid Lua table syntax, however. A program creates an embedded Lua environment with an item callback function and runs this file inside it. Something similar could be done to convert it to another format; just define item to output the data as JSON, or whatever other format you prefer.

The Prosody XMPP server, written in Lua, generates files of this type when serializing lists with the "internal" storage manager. See functions list_store and list_load in util/datamanager.lua.

[-] sloppy_diffuser@sh.itjust.works 1 points 9 months ago

Possibly lua? I think it supports brackets and semi-colon from a quick google search, but I could be wrong. Not able to test this moment.

[-] Knusper@feddit.de 1 points 9 months ago

It looks similar in structure to JSON:

{
    "attr": {
        "size": "62091",
        "filename": "qBuUP9-OTfuzibt6PQX4-g.jpg",
        ...
    };
    "key": "Wa4AJWFldqRZjBozponbSLRZ",
     ...
}

So, it might be some JSON meta language. I just find it weird that it seems to contain all data, so you wouldn't use this for validating or templating JSON.

But ultimately, it also means with a handful of regex replacements, you could turn this particular file into JSON. Might make building your own parser almost trivial...

[-] luthis@lemmy.nz 2 points 9 months ago

Yeah, its real close to JSON but not.

I'm going to have to go a step deeper and find out what's going on in the code because this section is repeated many many times. It's not just this one that I need to parse.

.. It might even be easier to write my own parser like you said, because I need to take actions based on the date fields.

[-] SheeEttin@programming.dev 1 points 8 months ago

It might help to know what software this belongs to.

this post was submitted on 11 Dec 2023
19 points (95.2% liked)

Linux

4921 readers
98 users here now

A community for everything relating to the linux operating system

Also check out !linux_memes@programming.dev

Original icon base courtesy of lewing@isc.tamu.edu and The GIMP

founded 1 year ago
MODERATORS