T2theC
T2theC

Reputation: 540

Jquery & JSON: Replace section of JSON array

I've been reading a ton on this and can't seem to find a solution that works for me. I am building a drag and drop menu system and saving the structure to the db as JSON.

I have a hidden field as part of a form that submits to the db. This hidden field has the full JSON string in it.

When I update a particular node/menu item, I want to search the value of the hidden text field, find the 'section' of JSON I want to update and replace it with the new values.

What is the best solution for this? grep? replaceWith?

Example before and after JSON

// This is the full json string
[{"title":"Cool link","link":"link","cssclass":"","cssid":"","id":"1399209929525"},{"title":"New link","link":"new-link.html","cssclass":"","cssid":"","id":"1399209790202"},{"title":"Another link","link":"cool","cssclass":"","cssid":"","id":"1399209834496"}]

// This is the updated section 
[{"title":"Another link changed","link":"cool","cssclass":"","cssid":"","id":"1399209834496"}]

So I have the updated section with a unique ID to search against.

A simple solution would be something like this, but it doesn't work like that.

var currentsection = /'{"title":"' + edittitle + '","link":"' + editurl + '","cssclass":"' + editcssclass + '","cssid":"' + editcssid + '","id":"' + editid + '"}'/;
var newsection = /'{"title":"' + updatedtitle + '","link":"' + updatedlink + '","cssclass":"' + updatedcssclass + '","cssid":"' + updatedcssid + '","id":"' + updatedid + '"}'/;

$("#menu_items").val().find(currentsection).replaceWith(newsection);

What do you think the best approach is? Many thanks for taking the time out to help. I really appreciate it.

Upvotes: 2

Views: 2375

Answers (1)

maxime1992
maxime1992

Reputation: 23793

I think you should create your JSON object, and work with it. In this way it would be easy to change values and also save it as you want ;)

For example :

var json = YOUR JSON HERE;
var obj = JSON.parse(json);

// now you can update values as you want
// for example with example title
obj[0].title = "updatetitle";

And then, before sending your JSON, you may want to convert it in plain text

var json = JSON.stringify(obj);

Upvotes: 2

Related Questions