小编Sei*_*idr的帖子

在Python中处理懒惰的JSON - '期望属性名'

使用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)

python json

47
推荐指数
4
解决办法
7万
查看次数

Google Cloud Messaging - 在网络状态发生变化之前,有时无法收到消息

在开发一个与GCM集成的小项目时,我偶然发现了一个奇怪的问题.

有时当我开始观看日志以查看是否收到消息时,在我改变网络状态(IE最初在WiFi上,如果我关闭WiFi并转移到移动数据,消息到达)之前,消息似乎没有通过精细).在我改变网络状态后,消息开始完全正常,一旦我将网络状态改回到之前的状态(在这种情况下,WiFi),消息将继续被接收,这同样适用.

该项目本身包括启动启动的能力(启动时启动GCMBaseIntentService),这也完全正常,我确信应用程序/服务正在运行,因为我在发生此问题时手动启动应用程序(其中还检查是否正在运行的服务,如果它不运行它,并检查它是否已注册).

有没有其他人遇到过这个问题,或者有任何指示我如何解决这个问题?我没有看到的消息的时间之间的日志中有很大帮助什么都没有收到,当他们(改变网络状态后).我已经浏览了GCM文档,并且看不到由于超时(在设备本身上)或任何可能影响此问题的配置选项而未收到消息的任何提及.

感谢所有帮助 - 我可以提供源如果需要的话,虽然它很难从Android的SDK提供的演示程序偏离.

android android-networking google-cloud-messaging

39
推荐指数
2
解决办法
2万
查看次数

Perl/PHP/ColdFusion中的TripleDES

最近出现了一个问题,即使用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)

php encryption coldfusion perl tripledes

12
推荐指数
2
解决办法
5372
查看次数

以编程方式启动Android 2.2中的"添加帐户"活动

我过去几天一直在尝试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意图实现),但是它会是相当不错的,以便能够引导用户直接到所需要的画面.

authentication android android-intent android-2.2-froyo

10
推荐指数
1
解决办法
1万
查看次数

Hive查询字符串大小写

有没有办法在执行此操作时获取所有类型的字符串案例:

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)

string select hive case

9
推荐指数
2
解决办法
2万
查看次数

当焦点是另一个元素时,更改元素的样式

当焦点在另一个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)

任何帮助真的很感激!

html css css-selectors

4
推荐指数
1
解决办法
5806
查看次数