JSON:Charset并获得键/值

时间:2012-07-23 11:14:30

标签: php javascript json utf-8 character-encoding

所以我有一个PHP脚本来执行此操作:

$rows = array();        
while($r = mysql_fetch_assoc($sth2)) {
 $rows[] = array($r['alternative'] => $r['amount']);
}
print json_encode($rows);

我得到了这个输出:

[{"\u00e5l":"3"},{"vin":"3"},{"whiskey":"1"},{"gin":"1"},{"rom":"1"},{"vodka":"1"}]

问题一:\ u00e5应该是ø。除了这个功能之外,其他所有功能都适用于utf8,任何想法如何解决这个问题?

第二个问题是我似乎无法在javascript中读取数据。我目前正在使用这段代码(我知道这不是很好,但现在应该可以使用):

$.each(obj, function(key, val) 
{
counter = counter +1 ;
switch (counter)
    {
        case 0:
            numberOne = key;
            valueOne = val;
            break;
        case 1:
            numberTwo = key;
            valueTwo = val;
            break;
        case 2:
            numberThree = key;
            valueThree = val;
            break;
        case 3:
            numberFour = key;
            valueFour = val;
            break;
        case 4:
            numberFive = key;
            valueFive = val;
            break;
        case 5:
            numberSix = key;
            valuesix = val;
            break;
    }
});

3 个答案:

答案 0 :(得分:1)

您可以将JSON_UNESCAPED_UNICODE选项传递给json_encode。

您用来读取数据的代码确实看起来不太理想,但很难评论如何改进它,因为我无法分辨您实际对数据做了什么。

答案 1 :(得分:0)

对于您可以使用的第二个问题

for(a in obj)
{
  alert(a +' = '+obj[a]);
}

你没有通过阅读对象属性来指定你想要实现的目标所以我把它留给了你:)希望它有所帮助。

编辑:

for(a in obj)
    {
      alert(a +' = '+obj[a]);
      for(b in obj[a])
      {
        alert(b+' = '+obj[a][b]); // or   alert(b+'  '+obj[a].b); would work  
      }
    }

答案 2 :(得分:-3)

您无法使用JSON传递空值。用空字符串替换它们。我建议通过

在查询级别执行此操作
case columnname when is null then '' end as newcolumnname