Description

The purpose of this Plugin is to allow you to work with complex Json objects from within the event system. High level Objectives include

  1. Load multiple json files at one time.
  2. Each file represents a json object and can be loaded into a named slot.
  3. Query and set values from the Json file using standard javascript notation.
  4. Loop over sub object arrays and nested sub object arrays and retrieve and set values.
  5. Allow Caching to be utilized if required so that json changes will be available during the next run but without altering the json files themselves.
  6. Allow an altered slot to be reset back to original json
  7. Get the length of an array within the json object based on standard javascript notation.
  8. Create a new json slot from a copy of a sub object from another slot based on a query.
  9. Create a C3 Array plugin object from a query into a named slot.
  10. Create a C3 Dictionary plugin object from a query into a named slot.

Restrictions

  1. Note important info at the bottom of this page on local storage and looping.
  2. json files can only contain one root object, so the first character and last character should be { }
  3. When converting a sub object to a C3 array, the array can not contain anything other then basic 1D, 2D, and 3D arrays. Object in an array can not be converted to the C3 array.
  4. When converting a sub object to a C3 dictionary, the dictionary can not contain anything other then basic object with property keys and values. Any additional objects within the object you are converting will be ignored by the C3 dictionary.

Load in Json Files

To specify the files to load and what to label them for access later you must set the following properties on the JsonManager itself through the properties page. The two items to fill in are:

  1. Json Files to Load: Comma separated list of file names like file.json,file2.json
  2. Json File Slot List: Comma separated list of slot names to load the above files into like slot1,slot2

Available Functions

Please refer to the included example file, JsonAddOnTest.c3p, to view how to use all the features of the Plugin. It is well commented and show provide good examples of how to accomplish all of the different tasks.

Json files by url

Care must be taken when using a url to load a Json file. The plugin was originally designed to work with Json files included in the project. When testing on your local machine the preview pane runs with https, which makes loading a file from http an issue (If you are loading it from your local web server). If you use http://127.0.0.1:port#, it will trusted by the browser to make a call from https to http, but you'll need to make sure your local web server that is serving the Json file has Cors headers set. Once that is done you can load the file with a url in preview. Of course if you make a call to an external server that is using ssl already, it should work.

Local Stotage

This plugin uses local storage to manage it's internal function regardless of whether you use caching or not. It manages it's own named locations in storage so it won't interfere with other programs. However if you totally clear cache some where in your game, you could affect this plugin.

Looping

This only pertains to my Json array loops nested inside of another Json array loop condition.

Conditions (Loop) - There is a parameter to indicate if this loop is nested inside another Json array loop. Set this to Yes when you are nested inside another one so it knows to use the relative position of the first one to locate nodes. If there is only one Json loop array structure set this to No.

Actions - There is a parameter to indicate if this action is inside of a json array loop. Set to Yes if so and No otherwise. This allows the action to ignore the slot designation and use the relative path of the current loop item.

Expressions - There is a parameter to indicate if this expression is inside of a Json array loop. Set to Yes if so and No otherwise. This allows the expression to ignore the slot designation and use the relative path of the current loop item.

Download

1.0.1 Stable (15 KB)

Info

  • License MIT License
  • Copyright Robert Greenberg. All rights reserved.

Statistics

  • Download count 86 total downloads
  • Latest download count 27 downloads of latest version
  • Average download count 3 downloads per day average

Owners

Tags

  • 27 Comments

  • Order by
Want to leave a comment? Login or Register an account!
  • Could you add a condition that tests for when the loop has completed. I.e. its true *after* the last loop item has been processed.

    This would be ideal to trigger post-loop action, such as selecting an element in a listbox, that was filled with the the loop

    thank you,

    Dan

    • You could just put a condition after the loop that will run as soon as the loop is done. I don't know if you really need an event for this.

      Also for commas in a string I would start1 with an empty string. Then when you try to append to it check if its empty. If its empty just add the string. If it's not empty add a comma first and then the string. Then you never have to worry about having too many commas

    • btw, sometimes its useful to also have a condition that tests true for when the last loop item processes, or even also the one before the last one. This helps customize construction tasks such a creation of json strings, where for last elements one does not add commas anymore.

  • It would be great if there could be additional dictionary like functionality, to construct a json, which can then be obtained via a toJson method.

    In my app, i need to update values in a google sheet. This means constructing an update json string as data for a ajax put call.

    now, the only way to do it is to build the string using concats

  • Hi,

    Was wondering if you got the link and were able to donwload it.

    thank you,

    Dan

  • To bad, that JSON manager doesn't load from a variable -- such as after receiving JSON via an Ajax call response.

    • It loads the json file through ajax itself internally. The example project shows how that works. Since it handles the ajax call behind the scenes, I didn't think it would be necessary to load it from a string. I can certainly look at adding that functionality if you feel it's really needed and can't be met using the functions in the plugin to load itself with the data.

      • Hi, just to clarify -- after reading the documentation.

        I noticed one could load json via a URL -- but, my use case is different ... i am obtaining a json response string after an ajax call (to google sheets) -- so its dynamically generated after the call. I can the access it via ajax.lastData.

        It would be great if i could load ajax.lastData into the jason manager.

        Load more comments (1 replies)
      • Hi,

        Thank you for your reply.

        I was trying all morning to figure out how to access a json structure i received from google sheets (just posted a question in the forum).

        I wasn't able to figure it out so far.

        I think if you can support an ajax call via an ajax string and then auto-magically have the respond available that would be great.

        Alternatively, i think reading in json from a string would make the plugin more flexible ...

        thank you,

        Dan

        Load more comments (12 replies)
  • thanks, pretty much needed :)