我将一些代码放在一起,以展平和展开复杂/嵌套的JSON对象.它有效,但它有点慢(触发'长脚本'警告).
对于我想要的扁平名称"." 作为数组的分隔符和[INDEX].
例子:
un-flattened | flattened
---------------------------
{foo:{bar:false}} => {"foo.bar":false}
{a:[{b:["c","d"]}]} => {"a[0].b[0]":"c","a[0].b[1]":"d"}
[1,[2,[3,4],5],6] => {"[0]":1,"[1].[0]":2,"[1].[1].[0]":3,"[1].[1].[1]":4,"[1].[2]":5,"[2]":6}
Run Code Online (Sandbox Code Playgroud)
我创建了一个基准,可以模拟我的用例http://jsfiddle.net/WSzec/
我想要更快的代码:为了澄清,在IE 9 +,FF 24+和Chrome 29 中完成JSFiddle基准测试(http://jsfiddle.net/WSzec/)的代码明显更快(~20%+会很好) +.
以下是相关的JavaScript代码:当前最快:http://jsfiddle.net/WSzec/6/
JSON.unflatten = function(data) {
"use strict";
if (Object(data) !== data || Array.isArray(data))
return data;
var result = {}, cur, prop, idx, last, temp;
for(var p in data) {
cur = result, prop = "", last = 0;
do {
idx = p.indexOf(".", last);
temp …Run Code Online (Sandbox Code Playgroud) _radixSort_0 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
/*
RADIX SORT
Use 256 bins
Use shadow array
- Get counts
- Transform counts to pointers
- Sort from LSB - MSB
*/
function radixSort(intArr) {
var cpy = new Int32Array(intArr.length);
var c4 = [].concat(_radixSort_0);
var c3 = [].concat(_radixSort_0);
var c2 = [].concat(_radixSort_0);
var c1 = [].concat(_radixSort_0);
var o4 = 0; var t4;
var o3 = 0; var t3;
var o2 …Run Code Online (Sandbox Code Playgroud) 启用了Windows身份验证的IIS7 Intranet站点.当从Windows上的Chrome点击时,传递身份验证工作正常(没有用户/密码提示),但是,Mac上的Chrome会出现提示.由于内部网络使用CAC/PKI,因此没有人拥有密码.
我尝试在网站上切换Windows身份验证以进行协商,但同样的用户/传递提示.
appcmd set config /section:windowsAuthentication /-providers.[value='Negotiate']
Run Code Online (Sandbox Code Playgroud)
有人知道OS X上的Chrome解决方案吗?
编辑
OS X 10.6.8
Centrify for Mac将用于通过CAC对(Windows 2008 R2 ActiveDirectory)网络进行身份验证.
编辑2
有一个代理设置,但它被绕过本地Intranet站点,所以我不认为它正在发挥作用.
还尝试使用--auth-server-whitelist命令行开关,没有用.
编辑3
解
open 'Google Chrome.app' --args --auth-server-whitelist="*DOMAIN.TLD" --auth-negotiate-delegate-whitelist="*DOMAIN.TLD" --auth-schemes="digest,ntlm,negotiate"
Run Code Online (Sandbox Code Playgroud)
不幸的是,谷歌Chrome for Mac无法在每次加载时指定命令行参数,因此需要制作某种shell脚本.
在登录时运行以下shell脚本是解决Chrome更新和额外文档图标的最终解决方案.
#!/bin/bash
cd /Applications/Google\ Chrome.app/Contents/MacOS/
if [ -f 'Google Chrome.bin' ];
then
echo "Already Modified"
else
sudo chmod u+wr ./
sudo mv 'Google Chrome' 'Google Chrome.bin'
sudo echo "#!/bin/bash" > "Google Chrome"
sudo echo 'exec /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome.bin --args --auth-server-whitelist="*DOMAIN.TLD" --auth-negotiate-delegate-whitelist="*DOMAIN.TLD" --auth-schemes="digest,ntlm,negotiate"' >> …Run Code Online (Sandbox Code Playgroud) 使用user.profile和user.email作用域以及/ oauth2/v2/userinfo feed似乎不会返回任何自定义字段(在我的案例中为Department)或电话号码.这些字段显示在"域共享联系人"目录中.
是否有类似于Apps域特定的供稿网址//oauth2/{DOMAIN}/v2/userinfo?
API /服务不支持任何自定义字段吗?
有没有办法将其捏造成工作?
对您自己的应用程序域共享联系人配置文件的读访问权限应该不会那么困难.
我更喜欢非管理员解决方案,因为我的域使用具有SAML身份验证的公共访问卡,所以我不能只在App Engine应用程序中存储管理员凭据(用户:密码)并访问/ m8/feed.如果有一个流程来访问具有预先授权的消费者密钥和秘密的域共享联系人(带有自定义字段),我会对使其工作的说明感兴趣.
编辑 Jay Lee钉了它" https://www.google.com/m8/feeds/gal/ {domain}/full"
以下是使用Google Apps脚本的概念验证脚本(我完成后会添加最终的OAuth2版本)
function getGal(email, passwd, domain) {
var res = UrlFetchApp.fetch("https://www.google.com/accounts/ClientLogin", {
contentType: "application/x-www-form-urlencoded",
method: "post",
payload: { "Email": email, "Passwd": passwd, "accountType": "HOSTED", "service":"cp" }
});
var auth = res.getContentText().match(/Auth=(.*)/i)[1];
Logger.log("Auth: " + auth);
res = UrlFetchApp.fetch("https://www.google.com/m8/feeds/gal/" + domain + "/full", {
method: "get",
headers: { "Authorization": "GoogleLogin auth=" + auth, "GData-Version": "1.0" }
});
Logger.log(res.getHeaders());
Logger.log(res.getContentText());
}
Run Code Online (Sandbox Code Playgroud)
编辑2返回JSON的OAuth版本,仅返回访问脚本的用户的信息.
function googleOAuthM8() { …Run Code Online (Sandbox Code Playgroud) algorithm ×2
javascript ×2
gdata ×1
google-apps ×1
iis-7 ×1
macos ×1
ntlm ×1
optimization ×1
performance ×1
sorting ×1