代码之家  ›  专栏  ›  技术社区  ›  demo

获取名称包含某些字符串的Json属性

  •  0
  • demo  · 技术社区  · 7 年前

    我没有典型的json,当我用用户名请求概要文件时会得到它(在这个例子中,我展示了如果我用 username1 . 如果我问你 username2 那么属性名是 "field_set_key=\"profile\",username=\"username2\""

    "UserProfileResource": {
        "field_set_key=\"profile\",username=\"username1\"": {
          "data": {
            "profile": {
              ...
            }
          }
        }
      }
    

    我不能简单地设定 JsonProperty

    是的,如果我知道请求了什么配置文件(传递了什么用户名),看起来很简单。

    只是将json字符串解析为 JObject ,生成该动态属性名称并使用 LINQ to JSON .

    但如果我不知道所请求的用户名,该怎么办呢?我可以获取属性值吗?该名称包含一些字符串(如 field_set_key=\"profile\" )以上面提到的LINQ到JSON为例?

    2 回复  |  直到 7 年前
        1
  •  1
  •   demo    7 年前

    正如@ZoharPeled在评论中所说,我可以使用 JsonPath 使用 SelectToken 如中所示 Querying JSON with SelectToken

    var jObject = JObject.Parse(json);
    
    var userProfile = jObject.SelectToken("UserProfileResource.*.data.profile").ToObject<UserProfile>();
    

    在这个示例中,我将json解析为 JObject 并从中使用 SelectToken

    * 方法

    通配符。所有对象/元素,无论其名称如何。

        2
  •  0
  •   Jeremie de Vos    7 年前

    嗨,我在一个老项目中发现了这段代码,希望它能帮助你解决一些问题! (这用于使用谷歌地图API自动填充地址) 我将此作为答案发布,因为我无法评论,因为50%的声誉:P

          //Get all adress components based on street-name & house-number
        public static List<Address> PostalcodeResults(string streetname, string number)
        {
            //Request url
            string url = @"https://maps.googleapis.com/maps/api/geocode/json?address=" + streetname + " " + number + "&result_type=street_address&key=" + API_Key;
    
            //Webrequest-streamreader
            WebRequest request = WebRequest.Create(url);
            WebResponse response = request.GetResponse();
            Stream data = response.GetResponseStream();
            StreamReader reader = new StreamReader(data);
    
            // json-formatted string from maps api
            string responseFromServer = reader.ReadToEnd();
    
            //Create lists for the results from the request
            JObject googleSearch = JObject.Parse(responseFromServer);
            IList<JToken> results = googleSearch["results"].Children().ToList();
    
            //list to return
            List<Address> list = new List<Address>();
    
            //foreach result
            foreach (JToken Result in results)
            {
                //Some local variable
                string street = "";
                string house_number = "";
                string zipcode = "";
                string country = "";
                string place = "";
                string provincie = "";
                string Township = "";
    
                //Foreach adress component from result
                foreach (JToken Adress_Components in Result.First().First())
                {
                    //List with types
                    IList<JToken> types = Adress_Components["types"].Children().ToList();
    
                    //Foreach type
                    foreach (JToken type in types)
                    {
                        //determ witch Variable it is
                        if (type.ToString() == "route")
                            street = Adress_Components["long_name"].ToString();
                        else if (type.ToString() == "street_number")
                            house_number = Adress_Components["long_name"].ToString();
                        else if (type.ToString() == "postal_code")
                            zipcode = Adress_Components["long_name"].ToString();
                        else if (type.ToString() == "country")
                            country = Adress_Components["long_name"].ToString();
                        else if (type.ToString() == "locality")
                            place = Adress_Components["long_name"].ToString();
                        else if (type.ToString() == "administrative_area_level_1")
                            provincie = Adress_Components["long_name"].ToString();
                        else if (type.ToString() == "administrative_area_level_2")
                            Township = Adress_Components["long_name"].ToString();
    
                    }
                }
                //MessageBox.Show(" Street: " + street + "\n House nr: " + house_number + "\n Zipcode: " + zipcode + "\n Country: " + country + "\n Place: " + place + "\n Province: " + provincie + "\n Township: " + Township);
                list.Add(new Address(street, house_number, zipcode, country, place, provincie, Township));
            }
            //return the lists
            return list;
        }
    
        //Get directions from one point to another
        private void getdirections()
        {
            string API_Key = "apikey";
            string url = @"https://maps.googleapis.com/maps/api/directions/json?origin=75+9th+Ave+New+York,+NY&destination=MetLife+Stadium+1+MetLife+Stadium+Dr+East+Rutherford,+NJ+07073&key=" + API_Key;
    
            WebRequest request = WebRequest.Create(url);
            WebResponse response = request.GetResponse();
            Stream data = response.GetResponseStream();
            StreamReader reader = new StreamReader(data);
    
            // json-formatted string from maps api
            string responseFromServer = reader.ReadToEnd();
            //richTextBox1.Text = responseFromServer;
        }
    }
    

    json响应:

    "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Somepostalcode",
               "short_name" : "Somepostalcode",
               "types" : [ "postal_code" ]
            },
            {
               "long_name" : "Somelocality",
               "short_name" : "Somelocality",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Someadministrative_area_level_2",
               "short_name" : "Someadministrative_area_level_2",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "SOmeProvince",
               "short_name" : "SomeShortname",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "SomeCountry",
               "short_name" : "SomeCountryShortage",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "foratted adress",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : ,
                  "lng" : 
               },
               "southwest" : {
                  "lat" : ,
                  "lng" : 
               }
            },
            "location" : {
               "lat" : ,
               "lng" : 
            },
            "location_type" : "",
            "viewport" : {
               "northeast" : {
                  "lat" : ,
                  "lng" : 
               },
               "southwest" : {
                  "lat" : ,
                  "lng" : 
               }
            }
         },
         "place_id" : "",
         "types" : [ "postal_code" ]
      }
    

    ], “状态”:“确定” }