重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5364|回复: 4

[其他] Json相关的操作

[复制链接]

287

主题

668

帖子

5617

积分

学生管理组

Rank: 8Rank: 8

积分
5617
发表于 2016-10-27 10:42:22 | 显示全部楼层 |阅读模式
本帖最后由 李维强-15级 于 2016-12-4 22:40 编辑

Json字符串查错的网址
http://jsonlint.com/


2楼  JS 添加json方法
回复

使用道具 举报

287

主题

668

帖子

5617

积分

学生管理组

Rank: 8Rank: 8

积分
5617
 楼主| 发表于 2016-12-4 22:38:48 | 显示全部楼层
比如现在有一条var jsonstr=“ [{'name':'a','value':1},{'name':'b','value':2}] ”;
然后将其变成json格式的 var json=eval('('+jsonstr+')');
现在我想直接对这个json数组进行操作向其中添加元素,有没有快捷的方法,还是说必须对上面的字符串进行操作再转成json对象

[JavaScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
//1、
var jsonstr="[{'name':'a','value':1},{'name':'b','value':2}]";
var jsonarray = eval('('+jsonstr+')');
  
var arr  =
     {
         "name" : $('#names').val(),
         "value" : $('#values').val()
     }
jsonarray.push(arr);
 
//2、
var json={};// 定义一个json对象
 json.array1=["2","4"];// 增加一个新属性,此属性是数组
 json.array1[json.array1.length]='6';// 数组追加一个元素
 alert(json.array1)
回复 支持 反对

使用道具 举报

287

主题

668

帖子

5617

积分

学生管理组

Rank: 8Rank: 8

积分
5617
 楼主| 发表于 2016-12-4 22:42:01 | 显示全部楼层
[C#] syntaxhighlighter_viewsource syntaxhighlighter_copycode
using System;
using Newtonsoft.Json.Linq;

namespace ChatPay
{
    class JsonStudy
    {
        public void demo()
        {
            string jsonStr = "";//Json Str字符串
            JToken json = JToken.Parse(jsonStr);//转化为JToken(JObject基类)

            string xx = json.Value<string>("xx");//获取Json里xx键的值

            JToken arr = json["arr"];//获取Json里的数组  {arr:[{yy:1,zz:2},{yy:3,zz:4}]}

            foreach (JToken baseJ in arr)//遍历数组
            {
                int yy = baseJ.Value<int>("yy");
            }

            string yy1 = json["arr"][0].Value<string>("yy");//也可以酱紫,多层的获取

            string yy2 = json["arr"][0]["yy"] != null ? json["arr"][0]["yy"].ToString() : "";//这个和上面句等价,不要直接ToString,容易报错


            /*JToken 不能示例化,若要生成新的Json,使用Jobject*/

            JObject newJson = new JObject();
            newJson["aa"] = "xxxx";//输入键值,赋值时键不能重复调用,如newJson["aa"]["bb"]酱紫不行

            JObject newJson2 = new JObject();
            newJson2["cc"] = "vbbb";
            newJson2["bb"]="dd";

            newJson["dd"] = newJson2;//酱紫完成多层Json的生成

        }

    }
}
回复 支持 反对

使用道具 举报

287

主题

668

帖子

5617

积分

学生管理组

Rank: 8Rank: 8

积分
5617
 楼主| 发表于 2016-12-4 22:53:01 | 显示全部楼层
[C#] syntaxhighlighter_viewsource syntaxhighlighter_copycode
//2.1 数组用JArray加载
 
string jsonText = "[{\"a\":\"aaa\",\"b\":\"bbb\",\"c\":\"ccc\"},{\"a\":\"aa\",\"b\":\"bb\",\"c\":\"cc\"}]";  
 
var mJObj = JArray.Parse(jsonText);
 
//需求,删除列表里的a节点的值为'aa'的项
 
IList<JToken> delList = new List<JToken>(); //存储需要删除的项
 
foreach (var ss in mJObj )  //查找某个字段与值
{
if(((JObject) ss)["a"]=="aa")
 
delList .add(ss);
}
 
foreach (var item in delList )  //移除mJObj  在delList 里的项
{
 
mJObj .remove(item); 
}
 
 
 
//2.2 非数组用JObject加载 (这里主要以这个为例子)
 
string jsonText = "[{\"a\":\"aaa\",\"b\":\"bbb\",\"c\":\"ccc\"}]";  
 
var mJObj = JObject.Parse(jsonText);
 
mJObj.Add() //新增,没试过
 
var v1=mJObj[a].ToString()  //得到'aaa'的值




以上的例子可交互灵活使用



注意事项,JArray 只能用来查找索引的项的对象,找到对象需要转换为 JObject,再查找对应的属性值



其他写法补充

1、属性下嵌套json (非数组)遍历其包含的属性列表

var xx = ((mJObj["dim"])).Children().Values();

foreach (var item in xx)
{
var dimID = ((JObject) item)["id"];

}
回复 支持 反对

使用道具 举报

287

主题

668

帖子

5617

积分

学生管理组

Rank: 8Rank: 8

积分
5617
 楼主| 发表于 2016-12-4 23:44:58 | 显示全部楼层
什么是检索在C#中甚至可能不存在使用Json.NET的JSON值的最佳做法? 现在我正在处理一个JSON提供返回的JSON包含某些键/值对,一点也不。我已经(甚至可能是错误)来得到我的价值观(例如得到一个双):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-4-16 15:52 , Processed in 0.159456 second(s), 30 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表