李维强-15级 发表于 2016-10-27 10:42:22

Json相关的操作

本帖最后由 李维强-15级 于 2016-12-4 22:40 编辑

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


2楼JS 添加json方法

李维强-15级 发表于 2016-12-4 22:38:48

比如现在有一条var jsonstr=“ [{'name':'a','value':1},{'name':'b','value':2}] ”;
然后将其变成json格式的 var json=eval('('+jsonstr+')');
现在我想直接对这个json数组进行操作向其中添加元素,有没有快捷的方法,还是说必须对上面的字符串进行操作再转成json对象

//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='6';// 数组追加一个元素
alert(json.array1)

李维强-15级 发表于 2016-12-4 22:42:01

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"].Value<string>("yy");//也可以酱紫,多层的获取

            string yy2 = json["arr"]["yy"] != null ? json["arr"]["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:01

//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.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:58

什么是检索在C#中甚至可能不存在使用Json.NET的JSON值的最佳做法? 现在我正在处理一个JSON提供返回的JSON包含某些键/值对,一点也不。我已经(甚至可能是错误)来得到我的价值观(例如得到一个双):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
页: [1]
查看完整版本: Json相关的操作