重工电子论坛

标题: Json相关的操作 [打印本页]

作者: 李维强-15级    时间: 2016-10-27 10:42
标题: Json相关的操作
本帖最后由 李维强-15级 于 2016-12-4 22:40 编辑

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


2楼  JS 添加json方法
作者: 李维强-15级    时间: 2016-12-4 22:38
比如现在有一条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)

作者: 李维强-15级    时间: 2016-12-4 22:42
[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的生成

        }

    }
}

作者: 李维强-15级    时间: 2016-12-4 22:53
[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"];

}
作者: 李维强-15级    时间: 2016-12-4 23:44
什么是检索在C#中甚至可能不存在使用Json.NET的JSON值的最佳做法? 现在我正在处理一个JSON提供返回的JSON包含某些键/值对,一点也不。我已经(甚至可能是错误)来得到我的价值观(例如得到一个双):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;




欢迎光临 重工电子论坛 (http://cqutlab.cn/) Powered by Discuz! X3.1