从 json 正文访问键的值

Posted

技术标签:

【中文标题】从 json 正文访问键的值【英文标题】:Accessing a key's value from json body 【发布时间】:2016-04-07 10:56:12 【问题描述】:

我已经向 node express 服务器发送了一个 post 请求

    app.post('/addUsers', function (req, res) 

   var newuser =  req.body;
   console.log(newuser);
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) 
     data = JSON.parse( data );
     data["user4"] = newuser // how can i create  a user4 here currently i get an error as newsier is whole req body or something .
     console.log( data );
//       res.end(data);
       res.end( JSON.stringify(data));
   );
)

并且我已经将 newuser 的值作为控制台作为

 '"user4":"password":"killer","id":4,"profession":"kuchbhi","name":"mukesh"': '' 

问题是如何获取 user4 的值,以便将其添加到用户列表中。

我在swift中使用这本词典

                                   ["user4":["name" : "mukesh",
                                     "password" : "killer",
                                     "profession" : "kuchbhi",
                                     "id": 4]]

一旦知道它的json无效,我就改成了这个

                                ["name" : "mukesh",
                                 "password" : "killer",
                                 "profession" : "kuchbhi",
                                 "id": 4]

并且知道我没有收到错误,但是添加第四个用户后来自服务器响应的数据(我已在 Xcode 控制台中打印)完全不是我认为应该的格式,它看起来像这样

["user2": 
    id = 2;
    name = suresh;
    password = password2;
    profession = librarian;
, "user4": 
    "\"password\":\"killer\",\"profession\":\"kuchbhi\",\"id\":4,\"name\":\"mukesh\"" = "";
, "user1": 
    id = 1;
    name = mahesh;
    password = password1;
    profession = teacher;
, "user3": 
    id = 3;
    name = ramesh;
    password = password3;
    profession = clerk;
]

我在 users.son 中手动添加了所有其他条目。 这是登录到终端控制台的内容

  user4:  '"password":"killer","profession":"kuchbhi","id":4,"name":"mukesh"': ''   

我仍然认为这不是好的 json 还是它?

感谢你是一个格式转换和服务器获取/发布东西的新手。

【问题讨论】:

你的 Json 对象只有一个字段:'"user4":"password":"killer","id":4,"profession":"kuchbhi","name": "mukesh"' 的值为:'' 这是故意的吗? 这不是一个有效的 json。请首先确保您有一个有效的 json。 【参考方案1】:

目前,您收到/呈现的 json 无效。

一旦您真正设法从客户端接收到有效的 JSON,这将如下所示。

var u = "user4":"password":"killer","id":4,"profession":"kuchbhi","name":"mukesh";

对于任何 json,您都可以使用命令获取其密钥

var theKeys = Object.keys(u);

在上面的例子中,整个JSON只有一个key,所以变量theKeys的内容是[ 'user4' ]。因此,您将能够通过查看theKeys[0] 来访问您想要的用户名。

同样,您可以使用命令获取内部 json 文档的属性

Object.keys(u[theKeys[0]]);

这将返回[ 'password', 'id', 'profession', 'name' ]

编辑

根据下面的评论,也许下面的代码可以帮助您从客户端正确发送 json 对象。

NSDictionary *aDictionary = @
    @"user4": @@"password": @"killer",
                @"id": @4,
                @"profession": @"kuchbhi"
              ;

NSError * error;
NSData * theData = [NSJSONSerialization dataWithJSONObject:aDictionary options:0 error:&error];
NSString * newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];

NSLog(@"body: %@", newStr);
[newStr release];

这是一个使用 swift 正确发送 json 的解决方案:https://***.com/a/31938246/1355058

【讨论】:

我正在将 NSData 发送到 httpBody,所以我应该在服务器上获取 nsdata 并将其转换为有效的 json,否则必须有一种方法发送 "user4":"password":"killer" ,"id":4,"profession":"kuchbhi","name":"mukesh" 这个 json 在 httpbody 中。所以我可以这样使用它。你能指导我吗? 您应该从客户端发送一个有效的 json,然后它看起来像上面的那个。很可能 NSJSONSerialization 对您的客户来说是一个简单的解决方案:***.com/a/9885928/1355058 我更新了上面的帖子,为您提供了一个可以在 http 请求正文中发布的字符串示例。另外,由于您使用的是 swift,也许这个更适合您***.com/a/31938246/1355058,这样您就可以使用 swift 在 http 请求的主体上发送一个 json 对象。 不客气。不要忘记接受答案。

以上是关于从 json 正文访问键的值的主要内容,如果未能解决你的问题,请参考以下文章

访问未知字典键的值

当键的名称中有点时(在 oracle 中),我如何访问 JSON 值?

在不知道对象键的情况下访问对象值

如何在 Objective-C 中访问键的单个 JSON 值

如何从 JWTAuth JSON 数据中访问单个值

从JSON中获取重复的对象键的值,并只用一个键替换返回。