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

Thanks but I can't use JS in my program.
I Easly replaced every single quotes by double quotes with $response =~ s/'/"/g; Now how can I do with a regex :
Quote every unquoted characteres beetween { or , or :
and { or , or :
Can I capture matching string with ( ) and use it in the replace part of the regex with quote around ?
I tried with
$response =~s/({|,|:)(.+)(}|,|:)/"$&"/g;

But it quotes the whole JSON...

Replies are listed 'Best First'.
Re^3: JSON error '"' expected, at character offset 1
by ikegami (Patriarch) on Jan 02, 2010 at 00:49 UTC

    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]
      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;
Re^3: JSON error '"' expected, at character offset 1
by Anonymous Monk on Jan 02, 2010 at 06:31 UTC
    Thanks but I can't use JS in my program.

    Maybe you should insist on JSON :D