in reply to Re^2: JSON error '"' expected, at character offset 1
in thread JSON error '"' expected, at character offset 1

What about

quote: 'He said: "boo!"'

Can I capture matching string with ( ) and use it in the replace part of the regex with quote around ?

$1

>perl -le"$_='abc'; s/(.)/[$1]/sg; print" [a][b][c]

Replies are listed 'Best First'.
Re^4: JSON error '"' expected, at character offset 1
by odrevet (Acolyte) on Jan 02, 2010 at 03:17 UTC
    ahah you got me on that one.

    I finally succeed:
    use strict; use warnings; use JSON; my $response = '{Id:"343410466704454908",Pseudo:Stan,Country:"PERL_REP +UBLIC",CountryId:1,CanRecieveImg:"true",Localization:"01",Localizatio +nId:859,Picto:"fille.gif",PictoId:0,Type:0,Sex:1,Comment:"biz",Age:22 +,Media:0,IsAd:false}'; $response =~s/([{:,])(\w+)([:,}])/$1"$2"$3/g; $response =~s/([{:,])(\w+)([:,}])/$1"$2"$3/g; print $response;
    output :
    {"Id":"343410466704454908","Pseudo":"Stan","Country":"PERL_REPUBLIC","CountryId":"1", "CanRecieveImg":"true","Localization":"01","LocalizationId":"859","Picto":"fille .gif","PictoId":"0","Type":"0","Sex":"1","Comment":"biz","Age":"22","Media":"0", "IsAd":"false"}
    Still there two things I don't like :

    The regex need to be called twice because unquoted words between : and , (eg Stan or 22) don't match, maybe because the : is alderly used for the rule words between , and :

    $1 replaced all the pattern
    ex : $response =~s/[{:,](\w+)[:,]/"$1"/g;
    "Id""343410466704454908""Pseudo"Stan
    So I used three capturing ( )

    It's quit lame but it works.. If someone have something better...

      The regex need to be called twice because unquoted words between : and , (eg Stan or 22) don't match

      You can solve that using

      $response =~s/([{:,])(\w+)(?=[:,}])/$1"$2"/g;

      In 5.10+, you can even do

      $response =~s/[{:,]\K(\w+)(?=[:,}])/"$1"/g;