我的 Zend_Json 在编码一个对象时搞砸了。我正在编码一个包含两个元素的关联数组: 元素 1 是另一个关联数组,而元素 2 是 HTML 字符串。他搞砸了,以至于 Html 字符串部分只包含 NULL!!?!?!?!?
当我对它执行 var_dump 时,这是未编码的元素...抱歉元素太长了... 它非常不稳定 - 我不明白这里出了什么问题......
array (
'map' =>
array (
0 =>
array (
'id' => '1403',
'name' => 'Amborovy Airport (Philibert Tsiranana Airport)',
'label' => 'Amborovy Airport (Philibert Tsiranana Airport)',
'html' => 'Amborovy Airport (Philibert Tsiranana Airport)',
'lat' => '-0.666944',
'lng' => '46.3517',
),
1 =>
array (
'id' => '6160',
'name' => 'Generalissimo Francisco de Miranda Airbase',
'label' => 'Generalissimo Francisco de Miranda Airbase',
'html' => 'Generalissimo Francisco de Miranda Airbase',
'lat' => '0.485',
'lng' => '-66.8436',
),
2 =>
array (
'id' => '7808',
'name' => 'Tirana International Airport',
'label' => 'Tirana International Airport',
'html' => 'Tirana International Airport',
'lat' => '41.4150929722',
'lng' => '19.7233001667',
),
3 =>
array (
'id' => '20881',
'name' => 'Tiranë Heliport',
'label' => 'Tiranë Heliport',
'html' => 'Tiranë Heliport',
'lat' => 41.315865416667,
'lng' => 19.888245972222,
),
4 =>
array (
'id' => '5218',
'name' => 'Abadan Airport',
'label' => 'Abadan Airport',
'html' => 'Abadan Airport',
'lat' => '0.371111',
'lng' => '48.2283',
),
5 =>
array (
'id' => '5330',
'name' => 'Lar Airport',
'label' => 'Lar Airport',
'html' => 'Lar Airport',
'lat' => '0.673056',
'lng' => '54.3814',
),
6 =>
array (
'id' => '7808',
'name' => 'Tirana International Airport',
'label' => 'Tirana International Airport',
'html' => 'Tirana International Airport',
'lat' => '41.4150929722',
'lng' => '19.7233001667',
),
7 =>
array (
'id' => '20881',
'name' => 'Tiranë Heliport',
'label' => 'Tiranë Heliport',
'html' => 'Tiranë Heliport',
'lat' => 41.315865416667,
'lng' => 19.888245972222,
),
8 =>
array (
'id' => '5218',
'name' => 'Abadan Airport',
'label' => 'Abadan Airport',
'html' => 'Abadan Airport',
'lat' => '0.371111',
'lng' => '48.2283',
),
9 =>
array (
'id' => '5225',
'name' => 'Ahvaz Airport',
'label' => 'Ahvaz Airport',
'html' => 'Ahvaz Airport',
'lat' => '0.337431',
'lng' => '48.762',
),
10 =>
array (
'id' => '5242',
'name' => 'Ardabil Airport',
'label' => 'Ardabil Airport',
'html' => 'Ardabil Airport',
'lat' => '0.325556',
'lng' => '48.4242',
),
11 =>
array (
'id' => '5243',
'name' => 'Asalouyeh Airport',
'label' => 'Asalouyeh Airport',
'html' => 'Asalouyeh Airport',
'lat' => '0.481389',
'lng' => '52.6153',
),
12 =>
array (
'id' => '5251',
'name' => 'Bandar Abbas International Airport',
'label' => 'Bandar Abbas International Airport',
'html' => 'Bandar Abbas International Airport',
'lat' => '0.218056',
'lng' => '56.3778',
),
13 =>
array (
'id' => '5259',
'name' => 'Birjand Airport',
'label' => 'Birjand Airport',
'html' => 'Birjand Airport',
'lat' => '0.898056',
'lng' => '59.2661',
),
14 =>
array (
'id' => '5278',
'name' => 'Dezful Airport',
'label' => 'Dezful Airport',
'html' => 'Dezful Airport',
'lat' => '0.434444',
'lng' => '48.3976',
),
15 =>
array (
'id' => '5306',
'name' => 'Jiroft Airport',
'label' => 'Jiroft Airport',
'html' => 'Jiroft Airport',
'lat' => '0.726944',
'lng' => '57.6703',
),
16 =>
array (
'id' => '5326',
'name' => 'Konarak Airport',
'label' => 'Konarak Airport',
'html' => 'Konarak Airport',
'lat' => '0.443333',
'lng' => '60.3819',
),
17 =>
array (
'id' => '5330',
'name' => 'Lar Airport',
'label' => 'Lar Airport',
'html' => 'Lar Airport',
'lat' => '0.673056',
'lng' => '54.3814',
),
18 =>
array (
'id' => '5331',
'name' => 'Lavan Airport',
'label' => 'Lavan Airport',
'html' => 'Lavan Airport',
'lat' => '0.810278',
'lng' => '53.3561',
),
19 =>
array (
'id' => '5359',
'name' => 'Parsabad-Moghan Airport',
'label' => 'Parsabad-Moghan Airport',
'html' => 'Parsabad-Moghan Airport',
'lat' => '0.603606',
'lng' => '47.8815',
),
20 =>
array (
'id' => '5361',
'name' => 'Persian Gulf Airport (Khalije Fars Airport)',
'label' => 'Persian Gulf Airport (Khalije Fars Airport)',
'html' => 'Persian Gulf Airport (Khalije Fars Airport)',
'lat' => '0.379444',
'lng' => '52.7375',
),
21 =>
array (
'id' => '5393',
'name' => 'Shahid Sadooghi Airport',
'label' => 'Shahid Sadooghi Airport',
'html' => 'Shahid Sadooghi Airport',
'lat' => '0.905',
'lng' => '54.2764',
),
22 =>
array (
'id' => '5411',
'name' => 'Tabriz International Airport',
'label' => 'Tabriz International Airport',
'html' => 'Tabriz International Airport',
'lat' => '0.133889',
'lng' => '46.235',
),
23 =>
array (
'id' => '1416',
'name' => 'Arrachart Airport',
'label' => 'Arrachart Airport',
'html' => 'Arrachart Airport',
'lat' => '-0.349167',
'lng' => '49.2917',
),
24 =>
array (
'id' => '7808',
'name' => 'Tirana International Airport',
'label' => 'Tirana International Airport',
'html' => 'Tirana International Airport',
'lat' => '41.4150929722',
'lng' => '19.7233001667',
),
25 =>
array (
'id' => '20881',
'name' => 'Tiranë Heliport',
'label' => 'Tiranë Heliport',
'html' => 'Tiranë Heliport',
'lat' => 41.315865416667,
'lng' => 19.888245972222,
),
),
'html' => '<div><b>Search Results for terms \'Iran\'</b> </div><a class="map-link" href="javascript:void(0);" onclick="toggleMapsSearch(\'name\');">4 results of Names with "Iran"</a><div id="map-results-name" class="map-results-nubbin" style="display:none;"><a class="map-sub-links" href="javascript:mapClickHandler(\'1403\')">Amborovy Airport (Philibert Ts<span Style="color:red; Font-weight:bold;">Iran</span>ana Airport)</a><a class="map-sub-links" href="javascript:mapClickHandler(\'6160\')">Generalissimo Francisco De M<span Style="color:red; Font-weight:bold;">Iran</span>da Airbase</a><a class="map-sub-links" href="javascript:mapClickHandler(\'7808\')">T<span Style="color:red; Font-weight:bold;">Iran</span>a International Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'20881\')">T<span Style="color:red; Font-weight:bold;">Iran</span>ë Heliport</a></div><a class="map-link" href="javascript:void(0);" onclick="toggleMapsSearch(\'city\');">4 results of Cities with "Iran"</a><div id="map-results-city" class="map-results-nubbin" style="display:none;"><a class="map-sub-links" href="javascript:mapClickHandler(\'5218\')">Abadan, <span Style="color:red; Font-weight:bold;">Iran</span> : Abadan Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5330\')">Lar, <span Style="color:red; Font-weight:bold;">Iran</span> : Lar Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'7808\')">T<span Style="color:red; Font-weight:bold;">Iran</span>a : Tirana International Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'20881\')">T<span Style="color:red; Font-weight:bold;">Iran</span>a : Tiranë Heliport</a></div><a class="map-link" href="javascript:void(0);" onclick="toggleMapsSearch(\'country\');">15 results of Countries with "Iran"</a><div id="map-results-country" class="map-results-nubbin" style="display:none;"><a class="map-sub-links" href="javascript:mapClickHandler(\'5218\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Abadan Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5225\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Ahvaz Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5242\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Ardabil Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5243\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Asalouyeh Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5251\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Bandar Abbas International Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5259\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Birjand Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5278\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Dezful Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5306\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Jiroft Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5326\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Konarak Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5330\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Lar Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5331\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Lavan Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5359\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Parsabad-Moghan Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5361\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Persian Gulf Airport (Khalije Fars Airport)</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5393\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Shahid Sadooghi Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5411\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Tabriz International Airport</a></div>',
)
下面是当我尝试使用 Zends_JSON 类将其编码为 JSON 时发生的情况...
{"map":[{"id":"1403","name":"Amborovy Airport (Philibert Tsiranana Airport)","label":"Amborovy Airport (Philibert Tsiranana Airport)","html":"Amborovy Airport (Philibert Tsiranana Airport)","lat":"-0.666944","lng":"46.3517"},{"id":"6160","name":"Generalissimo Francisco de Miranda Airbase","label":"Generalissimo Francisco de Miranda Airbase","html":"Generalissimo Francisco de Miranda Airbase","lat":"0.485","lng":"-66.8436"},{"id":"7808","name":"Tirana International Airport","label":"Tirana International Airport","html":"Tirana International Airport","lat":"41.4150929722","lng":"19.7233001667"},{"id":"20881","name":null,"label":null,"html":null,"lat":41.315865416667,"lng":19.888245972222},{"id":"5218","name":"Abadan Airport","label":"Abadan Airport","html":"Abadan Airport","lat":"0.371111","lng":"48.2283"},{"id":"5330","name":"Lar Airport","label":"Lar Airport","html":"Lar Airport","lat":"0.673056","lng":"54.3814"},{"id":"7808","name":"Tirana International Airport","label":"Tirana International Airport","html":"Tirana International Airport","lat":"41.4150929722","lng":"19.7233001667"},{"id":"20881","name":null,"label":null,"html":null,"lat":41.315865416667,"lng":19.888245972222},{"id":"5218","name":"Abadan Airport","label":"Abadan Airport","html":"Abadan Airport","lat":"0.371111","lng":"48.2283"},{"id":"5225","name":"Ahvaz Airport","label":"Ahvaz Airport","html":"Ahvaz Airport","lat":"0.337431","lng":"48.762"},{"id":"5242","name":"Ardabil Airport","label":"Ardabil Airport","html":"Ardabil Airport","lat":"0.325556","lng":"48.4242"},{"id":"5243","name":"Asalouyeh Airport","label":"Asalouyeh Airport","html":"Asalouyeh Airport","lat":"0.481389","lng":"52.6153"},{"id":"5251","name":"Bandar Abbas International Airport","label":"Bandar Abbas International Airport","html":"Bandar Abbas International Airport","lat":"0.218056","lng":"56.3778"},{"id":"5259","name":"Birjand Airport","label":"Birjand Airport","html":"Birjand Airport","lat":"0.898056","lng":"59.2661"},{"id":"5278","name":"Dezful Airport","label":"Dezful Airport","html":"Dezful Airport","lat":"0.434444","lng":"48.3976"},{"id":"5306","name":"Jiroft Airport","label":"Jiroft Airport","html":"Jiroft Airport","lat":"0.726944","lng":"57.6703"},{"id":"5326","name":"Konarak Airport","label":"Konarak Airport","html":"Konarak Airport","lat":"0.443333","lng":"60.3819"},{"id":"5330","name":"Lar Airport","label":"Lar Airport","html":"Lar Airport","lat":"0.673056","lng":"54.3814"},{"id":"5331","name":"Lavan Airport","label":"Lavan Airport","html":"Lavan Airport","lat":"0.810278","lng":"53.3561"},{"id":"5359","name":"Parsabad-Moghan Airport","label":"Parsabad-Moghan Airport","html":"Parsabad-Moghan Airport","lat":"0.603606","lng":"47.8815"},{"id":"5361","name":"Persian Gulf Airport (Khalije Fars Airport)","label":"Persian Gulf Airport (Khalije Fars Airport)","html":"Persian Gulf Airport (Khalije Fars Airport)","lat":"0.379444","lng":"52.7375"},{"id":"5393","name":"Shahid Sadooghi Airport","label":"Shahid Sadooghi Airport","html":"Shahid Sadooghi Airport","lat":"0.905","lng":"54.2764"},{"id":"5411","name":"Tabriz International Airport","label":"Tabriz International Airport","html":"Tabriz International Airport","lat":"0.133889","lng":"46.235"},{"id":"1416","name":"Arrachart Airport","label":"Arrachart Airport","html":"Arrachart Airport","lat":"-0.349167","lng":"49.2917"},{"id":"7808","name":"Tirana International Airport","label":"Tirana International Airport","html":"Tirana International Airport","lat":"41.4150929722","lng":"19.7233001667"},{"id":"20881","name":null,"label":null,"html":null,"lat":41.315865416667,"lng":19.888245972222}],"html":null}
注意最后 - HTML 的巨大笨拙 - GONE 被 null 取代......这里发生了什么:(
编辑
经过一些调查,我在错误日志中发现了这个错误:
PHP Warning: json_encode() [<a href='function.json-encode'>function.json-encode</a>]: Invalid UTF-8 sequence in argument in C:\wamp\www\fltdata\library\Zend\Json.php
我认为这可能与我面临的问题有关?我该如何解决这个问题?
编辑
我的 Php 版本是 5.2.9-2 - 我怀疑这是由于早于 5.2.7 的版本中存在的问题...请大家帮忙!!!
编辑
通过 json_encode() 运行对象返回相同的结果,我得到相同的错误:
PHP Warning: json_encode() [<a href='function.json-encode'>function.json-encode</a>]: Invalid UTF-8 sequence in argument in...
我在这里难住了:(
解决方案
呜呼!!!!我想通了:我只是通过 utf8_encode 函数运行 html 字符串变量,然后在其上运行 JSON 编码函数:
$result['html'] = utf8_encode($result['html']);
它有效 - 感谢大家的所有帮助 - 我无法为这里的每个帖子投票超过一次,这让我感到非常局限 - 你们都是非常棒的帮助 :D 再次感谢!!!
最佳答案
您可以通过将 PHP 版本更新到高于 5.2.7 的版本来解决此问题。
有一个serious UTF-8 bug在 PHP 的 json_encode 中该版本之前的功能。查看changelog了解更多详情。
既然您注意到您使用的是 PHP 版本 5.2.9.2,那么您的版本应该不错 :) 您是否尝试过手动通过 PHP 的 json_encode() 路由 html 的特定内容?
或者可能通过 utf8_encode()或 utf8_decode() ?
关于php - Zend_JSON :Encode messing up - why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741894/
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
让我们计算MRI范围内的类别:defcount_classesObjectSpace.count_objects[:T_CLASS]endk=count_classes用类方法定义类:classAdefself.foonilendend然后运行:putscount_classes-k#=>3请解释一下,为什么是三个? 最佳答案 查看MRI代码,每次你创建一个Class时,在Ruby中它是Class类型的对象,ruby会自动为这个新类创建“元类”类,这是另一个单例类型的Class对象。C函数调用(class.c)是:rb_define
我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我遇到了一些Ruby代码,我试图理解为什么变量在initialize方法声明中的名称末尾有冒号。冒号有什么原因吗?attr_reader:var1,:var2definitialize(var1:,var2:)@var1=var1@var2=var2end 最佳答案 那些是关键字参数。您可以按名称而非位置使用它们。例如ThatClass.new(var1:42,var2:"foo")或ThatClass.new(var2:"foo",var1:42)Anarticleaboutkeywordargumentsbythoughtbot
我在一个简单的RailsAPI中有以下Controller代码:classApi::V1::AccountsControllerehead:not_foundendendend问题在于,生成的json具有以下格式:{id:2,name:'Simpleaccount',cash_flows:[{id:1,amount:34.3,description:'simpledescription'},{id:2,amount:1.12,description:'otherdescription'}]}我需要我生成的json是camelCase('cashFlows'而不是'cash_flows'
我正在学习如何使用JSONgem解析和生成JSON。我可以轻松地创建数据哈希并将其生成为JSON;但是,在获取一个类的实例(例如Person实例)并将其所有实例变量放入哈希中以转换为JSON时,我脑袋放屁。这是我遇到问题的例子:require"json"classPersondefinitialize(name,age,address)@name=name@age=age@address=addressenddefto_jsonendendp=Person.new('JohnDoe',46,"123ElmStreet")p.to_json我想创建一个.to_json方法,这样我就可以获
我正在构建一个带有Rails后端的JS应用程序,为了不混淆snake和camelcases,我想通过从服务器返回camelcase键名来规范化这一切。因此,当从API返回时,user.last_name将返回user.lastName。我如何实现这一点?谢谢!编辑:添加Controller代码classApi::V1::UsersController 最佳答案 我的方法是使用ActiveModelSerializer和json_api适配器:在你的Gemfile中,添加:gem'active_model_serializers'创建
我有以下内容:@array.inspect["x1","x2","adad"]我希望能够将其格式化为:client.send_message(s,m,{:id=>"x1",:id=>"x2",:id=>"adad"})client.send_message(s,m,???????)如何在????????中获得@array输出?空间作为ID?谢谢 最佳答案 {:id=>"x1",:id=>"x2",:id=>"adad"}不是有效的散列,因为您有键冲突它应该是这样的:{"ids":["x1","x2","x3"]}更新:@a=["x1
这里我想输出带有动态组名的json而不是单词组@tickets.eachdo|group,v|json.group{json.array!vdo|ticket|json.partial!'tickets/ticket',ticket:ticketend}end@ticket是这样的散列{a:[....],b:[.....]}我想要这样的输出{a:[.....],b:[....]} 最佳答案 感谢@AntarrByrd,这个问题有类似的答案:JBuilderdynamickeysformodelattributes使用上面的逻辑我已经