Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中访问用户会话数据时遇到问题_Javascript_Json - Fatal编程技术网

在javascript中访问用户会话数据时遇到问题

在javascript中访问用户会话数据时遇到问题,javascript,json,Javascript,Json,我从PHP获取要表达的会话数据,并读取它。但现在我遇到了麻烦,我无法读取JSON字符串数据。我曾尝试JSON.parse()和JSON.stringify,但仍然没有成功,所以请为我提供解决方案 下面是JSON字符串 action: 'write', id: 'iurrv1rv8qjrb7sdb69io2mqi0', data: 'lang|O:4:"I18n":11:{s:19:"\u0000CActiveRecord\u0000_new";b:0;s:26:"\u0000CActi

我从PHP获取要表达的会话数据,并读取它。但现在我遇到了麻烦,我无法读取JSON字符串数据。我曾尝试
JSON.parse()
JSON.stringify
,但仍然没有成功,所以请为我提供解决方案

下面是JSON字符串

 action: 'write',
  id: 'iurrv1rv8qjrb7sdb69io2mqi0',
  data: 'lang|O:4:"I18n":11:{s:19:"\u0000CActiveRecord\u0000_new";b:0;s:26:"\u0000CActiveRecord\u0000_attributes";a:9:{s:2:"id";s:1:"9";s:9:"i18n_flag";s:44:"ac84a0fd7788953be215d0c39e0f6475c5e02708.png";s:9:"i18n_name";s:5:"en_gb";s:9:"i18n_code";s:5:"en-gb";s:14:"i18n_full_name";s:10:"English-UK";s:10:"is_default";s:1:"1";s:9:"is_active";s:1:"1";s:10:"created_at";s:19:"2015-05-18 17:29:30";s:10:"updated_at";s:19:"2015-06-29 11:52:18";}s:23:"\u0000CActiveRecord\u0000_related";a:0:{}s:17:"\u0000CActiveRecord\u0000_c";N;s:18:"\u0000CActiveRecord\u0000_pk";s:1:"9";s:21:"\u0000CActiveRecord\u0000_alias";s:1:"t";s:15:"\u0000CModel\u0000_errors";a:0:{}s:19:"\u0000CModel\u0000_validators";N;s:17:"\u0000CModel\u0000_scenario";s:6:"update";s:14:"\u0000CComponent\u0000_e";N;s:14:"\u0000CComponent\u0000_m";N;}currency|O:8:"Currency":11:{s:19:"\u0000CActiveRecord\u0000_new";b:0;s:26:"\u0000CActiveRecord\u0000_attributes";a:8:{s:2:"id";s:1:"3";s:13:"currency_name";s:4:"Euro";s:13:"currency_code";s:3:"EUR";s:14:"currency_signs";s:3:"€";s:10:"is_default";s:1:"0";s:9:"is_active";s:1:"1";s:10:"created_at";s:19:"2015-05-06 14:16:01";s:10:"updated_at";s:19:"2015-05-06 14:16:54";}s:23:"\u0000CActiveRecord\u0000_related";a:0:{}s:17:"\u0000CActiveRecord\u0000_c";N;s:18:"\u0000CActiveRecord\u0000_pk";s:1:"3";s:21:"\u0000CActiveRecord\u0000_alias";s:1:"t";s:15:"\u0000CModel\u0000_errors";a:0:{}s:19:"\u0000CModel\u0000_validators";N;s:17:"\u0000CModel\u0000_scenario";s:6:"update";s:14:"\u0000CComponent\u0000_e";N;s:14:"\u0000CComponent\u0000_m";N;}user_id|i:52;user_type|i:3;user_email|s:21:"laxman@mailinator.com";username|s:3:"lax";iplocation|a:11:{s:10:"statusCode";s:2:"OK";s:13:"statusMessage";s:0:"";s:9:"ipAddress";s:14:"103.240.34.199";s:11:"countryCode";s:2:"IN";s:11:"countryName";s:5:"India";s:10:"regionName";s:7:"Gujarat";s:8:"cityName";s:9:"Ahmedabad";s:7:"zipCode";s:6:"380028";s:8:"latitude";s:7:"23.0333";s:9:"longitude";s:7:"72.6167";s:8:"timeZone";s:6:"+05:30";}',
  time: '1444389652',
  dataJSON: '{"lang":{},"currency":{},"user_id":52,"user_type":3,"user_email":"laxman@mailinator.com","username":"lax","iplocation":{"statusCode":"OK","statusMessage":"","ipAddress":"103.240.34.199","countryCode":"IN","countryName":"India","regionName":"Gujarat","cityName":"Ahmedabad","zipCode":"380028","latitude":"23.0333","longitude":"72.6167","timeZone":"+05:30"}}' }
我能够读取JSON数据,但无法获取用户id、用户类型等值。我发现数据类型使用typeof for dataJSON,它以字符串形式返回

console.log(parseUrl.dataJSON)
给出以下输出

{
    "lang": {},
    "currency": {},
    "user_id": 52,
    "user_type": 3,
    "user_email": "laxman@mailinator.com",
    "username": "lax",
    "iplocation": {
        "statusCode": "OK",
        "statusMessage": "",
        "ipAddress": "103.240.34.199",
        "countryCode": "IN",
        "countryName": "India",
        "regionName": "Gujarat",
        "cityName": "Ahmedabad",
        "zipCode": "380028",
        "latitude": "23.0333",
        "longitude": "72.6167",
        "timeZone": "+05:30"
    }
}

所以现在麻烦来了如何从这个JSON获取用户id?

这应该很有用:

var userId = JSON.parse(someObj.dataJSON || {}).user_id;
注意,这里的
someObj
是您在中拥有的
action
id
数据
等变量


在服务器的响应中,您接收到一个字符串化的JSON对象,因此我们对其进行解析,以接收一个真实的对象,而不是字符串。然后访问想要的属性。

我已经找到了问题的答案。下面是parseUrl响应数组的最终输出,我想从dataJSON中提取数据

解析URL响应:

{
    action: 'write',
    id: 'biroh26adl9mc954nrrlf6bqm0',
    data: 'lang|O: 4: "I18n": 11: {
        s: 19: "\u0000CActiveRecord\u0000_new";b: 0;s: 26: "\u0000CActiveRecord\u0000_attributes";a: 9: {
            s: 2: "id";s: 1: "9";s: 9: "i18n_flag";s: 44: "ac84a0fd7788953be215d0c39e0f6475c5e02708.png";s: 9: "i18n_name";s: 5: "en_gb";s: 9: "i18n_code";s: 5: "en-gb";s: 14: "i18n_full_name";s: 10: "English-UK";s: 10: "is_default";s: 1: "1";s: 9: "is_active";s: 1: "1";s: 10: "created_at";s: 19: "2015-05-18 17:29:30";s: 10: "updated_at";s: 19: "2015-06-29 11:52:18";
        }s: 23: "\u0000CActiveRecord\u0000_related";a: 0: {

        }s: 17: "\u0000CActiveRecord\u0000_c";N;s: 18: "\u0000CActiveRecord\u0000_pk";s: 1: "9";s: 21: "\u0000CActiveRecord\u0000_alias";s: 1: "t";s: 15: "\u0000CModel\u0000_errors";a: 0: {

        }s: 19: "\u0000CModel\u0000_validators";N;s: 17: "\u0000CModel\u0000_scenario";s: 6: "update";s: 14: "\u0000CComponent\u0000_e";N;s: 14: "\u0000CComponent\u0000_m";N;
    }currency|O: 8: "Currency": 11: {
        s: 19: "\u0000CActiveRecord\u0000_new";b: 0;s: 26: "\u0000CActiveRecord\u0000_attributes";a: 8: {
            s: 2: "id";s: 1: "3";s: 13: "currency_name";s: 4: "Euro";s: 13: "currency_code";s: 3: "EUR";s: 14: "currency_signs";s: 3: "€";s: 10: "is_default";s: 1: "0";s: 9: "is_active";s: 1: "1";s: 10: "created_at";s: 19: "2015-05-06 14:16:01";s: 10: "updated_at";s: 19: "2015-05-06 14:16:54";
        }s: 23: "\u0000CActiveRecord\u0000_related";a: 0: {

        }s: 17: "\u0000CActiveRecord\u0000_c";N;s: 18: "\u0000CActiveRecord\u0000_pk";s: 1: "3";s: 21: "\u0000CActiveRecord\u0000_alias";s: 1: "t";s: 15: "\u0000CModel\u0000_errors";a: 0: {

        }s: 19: "\u0000CModel\u0000_validators";N;s: 17: "\u0000CModel\u0000_scenario";s: 6: "update";s: 14: "\u0000CComponent\u0000_e";N;s: 14: "\u0000CComponent\u0000_m";N;
    }user_id|i: 52;user_type|i: 3;user_email|s: 21: "laxman@mailinator.com";username|s: 3: "lax";iplocation|a: 11: {
        s: 10: "statusCode";s: 2: "OK";s: 13: "statusMessage";s: 0: "";s: 9: "ipAddress";s: 14: "103.240.34.199";s: 11: "countryCode";s: 2: "IN";s: 11: "countryName";s: 5: "India";s: 10: "regionName";s: 7: "Gujarat";s: 8: "cityName";s: 9: "Ahmedabad";s: 7: "zipCode";s: 6: "380028";s: 8: "latitude";s: 7: "23.0333";s: 9: "longitude";s: 7: "72.6167";s: 8: "timeZone";s: 6: "+05:30";
    }',
    time: '1444451442',
    dataJSON: '{
        "lang": {

        },
        "currency": {

        },
        "user_id": 52,
        "user_type": 3,
        "user_email": "laxman@mailinator.com",
        "username": "lax",
        "iplocation": {
            "statusCode": "OK",
            "statusMessage": "",
            "ipAddress": "103.240.34.199",
            "countryCode": "IN",
            "countryName": "India",
            "regionName": "Gujarat",
            "cityName": "Ahmedabad",
            "zipCode": "380028",
            "latitude": "23.0333",
            "longitude": "72.6167",
            "timeZone": "+05:30"
        }
    }'
}
解析代码:

var parseUrl = url.parse(req.url, true).query;
res.writeHead(200, {'Content-type': "text/plain"});
res.end(sessionHandler.run(parseUrl));
if ("string" === typeof (parseUrl.dataJSON)) {
    var _objUser = JSON.parse(parseUrl.dataJSON);        
    console.log(_objUser.user_id) // Response : 52
}

谢谢你,Yavor,整个json对象存储在parseUrl变量中,你的意思是喜欢console.log(json.parse(parseUrl.dataJSON | |{}).user_id);我是对的,但它仍然在我的控制台中给我一个“未定义”的错误。
parseUrl
是实际对象吗?你确定它没有被字符串化吗?我下面的朋友是代码:var server=require(“http”).createServer(function(req,res){var parseUrl=url.parse(req.url,true)。query;res.writeHead(200,{Content-type':“text/plain”});res.end(sessionHandler.run(parseUrl));console.log(JSON.parse(parseUrl.dataJSON|{})。user|id)});看看这段代码,我无法测试它。未知变量太多。只要确保这不是以某种方式异步完成的。由于它是nodejs,我想是的。请阅读昨天我发布的这个问题,以获得读取sesison数据的解决方案,但今天我找到了自己,但后来我又遇到了读取json数据的新问题。您可能会更好地了解这是一个工作代码,当使用typeof获取parserUrl的响应数据类型时,它会返回object。