使用Pythons(2.7)'json'模块我正在寻找处理各种JSON提要.不幸的是,其中一些提要不符合JSON标准 - 具体而言,某些键不包含在双重语音标记(")中.这导致Python出错.
在编写一个丑陋的代码片段来解析和修复传入的数据之前,我想我会问 - 有没有办法允许Python解析这个格式错误的JSON或"修复"数据,这样就可以了有效的JSON?
工作实例
import json
>>> json.loads('{"key1":1,"key2":2,"key3":3}')
{'key3': 3, 'key2': 2, 'key1': 1}
Run Code Online (Sandbox Code Playgroud)
破碎的例子
import json
>>> json.loads('{key1:1,key2:2,key3:3}')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\json\__init__.py", line 310, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 346, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 362, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)
Run Code Online (Sandbox Code Playgroud)
我已经编写了一个小的REGEX来修复来自这个特定提供商的JSON,但我预测这将成为未来的一个问题.以下是我提出的建议.
>>> import re
>>> s …Run Code Online (Sandbox Code Playgroud) 在开发一个与GCM集成的小项目时,我偶然发现了一个奇怪的问题.
有时当我开始观看日志以查看是否收到消息时,在我改变网络状态(IE最初在WiFi上,如果我关闭WiFi并转移到移动数据,消息到达)之前,消息似乎没有通过精细).在我改变网络状态后,消息开始完全正常,一旦我将网络状态改回到之前的状态(在这种情况下,WiFi),消息将继续被接收,这同样适用.
该项目本身包括启动启动的能力(启动时启动GCMBaseIntentService),这也完全正常,我确信应用程序/服务正在运行,因为我在发生此问题时手动启动应用程序(其中还检查是否正在运行的服务,如果它不运行它,并检查它是否已注册).
有没有其他人遇到过这个问题,或者有任何指示我如何解决这个问题?我没有看到的消息的时间之间的日志中有很大帮助什么都没有收到,当他们(改变网络状态后).我已经浏览了GCM文档,并且看不到由于超时(在设备本身上)或任何可能影响此问题的配置选项而未收到消息的任何提及.
感谢所有帮助 - 我可以提供源如果需要的话,虽然它很难从Android的SDK提供的演示程序偏离.
最近出现了一个问题,即使用TripleDES标准将请求字符串加密的支付处理器连接到API以用作令牌.我们的应用程序使用ColdFusion运行,它有一个加密标签 - 支持TripleDES - 但是我们得到的结果并不是支付处理器所期望的.
首先,这是支付处理器所期望的结果令牌.
AYOF+kRtg239Mnyc8QIarw==
Run Code Online (Sandbox Code Playgroud)
下面是我们正在使用的ColdFusion的片段,以及结果字符串.
<!--- Coldfusion Crypt (here be monsters) --->
<cfset theKey="123412341234123412341234">
<cfset theString = "username=test123">
<cfset strEncodedEnc = Encrypt(theString, theKey, "DESEDE", "Base64")>
<!---
resulting string(strEncodedEnc): tc/Jb7E9w+HpU2Yvn5dA7ILGmyNTQM0h
--->
Run Code Online (Sandbox Code Playgroud)
如您所见,这并没有返回我们希望的字符串.寻求解决方案,我们为此过程抛弃了ColdFusion,并尝试在PHP中重现令牌.
现在我知道各种语言以不同的方式实现加密 - 例如在过去管理C#应用程序和PHP后端之间的加密,我不得不玩填充以使两者交谈,但是我的经验是,PHP在加密标准方面通常表现得很好.
无论如何,我们尝试的PHP源代码和结果字符串.
/* PHP Circus (here be Elephants) */
$theKey="123412341234123412341234";
$theString="username=test123";
$strEncodedEnc=base64_encode(mcrypt_ecb (MCRYPT_3DES, $theKey, $theString, MCRYPT_ENCRYPT));
/*
resulting string(strEncodedEnc): sfiSu4mVggia8Ysw98x0uw==
*/
Run Code Online (Sandbox Code Playgroud)
正如您可以清楚地看到的那样,我们有另一个字符串,它与支付处理器预期的字符串和ColdFusion生成的字符串不同.提示头对墙集成技术.
经过与支付处理器的多次往复通信(很多代表说"我们无法解决编码问题,你必须做错了,阅读手册")我们最终被升级为超过一对脑细胞在一起摩擦,能够退后一步,实际观察和诊断问题.
他同意,我们的CF和PHP尝试没有产生正确的字符串.经过快速搜索,他还同意这不是我们的来源,而是两种语言如何实现他们对TripleDES标准的看法.
今天早上进入办公室时,我们遇到了一封包含Perl源代码片段的电子邮件.这是他们在最终直接使用的代码,用于生成预期的令牌.
#!/usr/bin/perl
# Perl Crypt Calamity (here be...something)
use strict;
use CGI;
use MIME::Base64;
use Crypt::TripleDES;
my $cgi = CGI->new(); …Run Code Online (Sandbox Code Playgroud) 我过去几天一直在尝试Android SDK,准备为商店编写应用程序,但是我遇到了一些问题.
我将要编写的应用程序要求用户拥有与手机关联的Google帐户.恢复和使用Auth令牌等不是问题,但是我希望能够通过菜单Settings-> Accounts-> Add Account来显示用户正常访问的活动.
现在通过实验,我已经能够使用以下命令从shell启动此活动.
am start -n com.google.android.gsf/.login.AccountIntroActivity
Run Code Online (Sandbox Code Playgroud)
我在使用Intent类在JAVA中执行相同的操作时遇到了问题.
会有人能先告诉我,这是否可以通过JAVA来实现,其次我怎么能去一下好吗?
如果我不得不满足于同步设置屏幕,然后我会(这可以通过Settings.ACTION_SYNC_SETTINGS意图实现),但是它会是相当不错的,以便能够引导用户直接到所需要的画面.
有没有办法在执行此操作时获取所有类型的字符串案例:
select count(word) from table where word="abcd"
Run Code Online (Sandbox Code Playgroud)
实际上,当这样做时,它与此不一样:
select count(word) from table where word="ABCD"
Run Code Online (Sandbox Code Playgroud) 当焦点在另一个div上时,我需要改变div的样式.我尝试了下面的代码但是没有用
<div id="one">
<div id="two">
Run Code Online (Sandbox Code Playgroud)
我的css文件看起来像这样
#one {
background-color:red;
}
#two:focus #one {
background-color:green;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助真的很感激!