views:

148

answers:

4

How to replace all " " siblings from JSON string?

{"Cat":"laps milk","Dog":"Woofs at Postman","Bird":"Jumps over the river","I":"Want to learn Regexp"}

And btw, advice me please some good article or book from where I could finally learn Regexp :(

+1  A: 

Try this:

var obj = {"Cat":"laps milk","Dog":"Woofs at Postman","Bird":"Jumps over the river","I":"Want to learn Regexp"};
for(var key in obj) {
    obj[key] = obj[key].replace(' ', '');
}

Also, the place that has helped me most in learning regular expressions:

Tatu Ulmanen
+1  A: 
var json = { "Cat"  : "laps_ milk",
             "Dog"  : "Woofs_ at_ Postman",
             "Bird" : "Jumps_ over_ the_ river",
             "I"    : "Want_ to_ learn_ Regexp" };
for (var prop in json) {
    json[prop] = json[prop].replace(/_/gi, '');
}

Regular Expressions is a good place to learn regexes.

Darin Dimitrov
+2  A: 

If you're parsing the JSON string, you can also use the reviver parameter of JSON.parse(string, [reviver]):

var jsonStr = '{"Cat":"laps milk","Dog":"Woofs at Postman","Bird":"Jumps over the river","I":"Want to learn Regexp"}';
var result = JSON.parse(jsonStr, function (key, value) {
    return value.replace(/ /g, " ");
});

Likewise, the stringify method allows a replacer function which will replace any values when converting to a JSON string:

var obj = {"Cat":"laps milk","Dog":"Woofs at Postman","Bird":"Jumps over the river","I":"Want to learn Regexp"};
var result = JSON.stringify(obj, function (key, value) {
    return value.replace(/ /g, " ");
});

Of course, this is assuming you're using json2.js or a browser with the correct ECMAScript 5th Edition implementation of the JSON object.

Andy E
I use Mootools. there is a JSON.decode/encode function
moogeek
@moogeek: `JSON.decode` isn't as good as the ECMA 5 implementation, and it doesn't have a reviver function - something which is especially useful for things like parsing date strings :-) Also, the json2.js link I posted gracefully checks if native support is already available from the browser, which would provide much faster parsing.
Andy E
but in Mootools JSON.decode/JSON.encode is crossbrowser solution and native ECMA way mostly supported only by Gecko/Webkit
moogeek
@moogeek: Native JSON is also supported in IE8 and all implementations are the same. The point of json2.js is to provide the equivalent of the native object if it doesn't exist, making it as much of a cross browser solution as Mootools JSON, with the added benefits of additional parsing/stringifying arguments and when native is available performance will be better.
Andy E
That being said, if you're already using Mootools, you might as well use the JSON implementation if you're happy with it.
Andy E
A: 

In Mootools: console.log(JSON.encode(mystring).replace(/ /gi, ' '));

moogeek