Title: ConvertFrom-Json silently throws away duplicated keys with identical casing · Issue #5199 · PowerShell/PowerShell · GitHub
Open Graph Title: ConvertFrom-Json silently throws away duplicated keys with identical casing · Issue #5199 · PowerShell/PowerShell
X Title: ConvertFrom-Json silently throws away duplicated keys with identical casing · Issue #5199 · PowerShell/PowerShell
Description: If the JSON contains duplicate keys with the same casing, then only the last key is used and the others are silently thrown away. The code in JsonObject.cs here actually caters for this case and would throw an error but it never gets to ...
Open Graph Description: If the JSON contains duplicate keys with the same casing, then only the last key is used and the others are silently thrown away. The code in JsonObject.cs here actually caters for this case and wo...
X Description: If the JSON contains duplicate keys with the same casing, then only the last key is used and the others are silently thrown away. The code in JsonObject.cs here actually caters for this case and wo...
Opengraph URL: https://github.com/PowerShell/PowerShell/issues/5199
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"ConvertFrom-Json silently throws away duplicated keys with identical casing","articleBody":"If the JSON contains duplicate keys with the same casing, then only the last key is used and the others are silently thrown away. The code in `JsonObject.cs` [here](https://github.com/PowerShell/PowerShell/blob/50f6667bdb0739a315f13b3dd013dc0fb96103cb/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonObject.cs#L103) actually caters for this case and would throw an error but it never gets to that stage because `JsonConvert.DeserializeObject` [here](https://github.com/PowerShell/PowerShell/blob/50f6667bdb0739a315f13b3dd013dc0fb96103cb/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/JsonObject.cs#L62) does not throw when there are duplicate keys and simply decides to take the last one.\r\n\r\nSteps to reproduce\r\n------------------\r\n\r\n```powershell\r\n'{ \"key\":\"value1\", \"key\":\"value2\" }' | ConvertFrom-Json\r\n```\r\n\r\nExpected behavior\r\n-----------------\r\n\r\nEither a warning that duplicated keys were disregarded or an error stating that duplicate keys are not allowed unless e.g something like. a `-Force` switch is used. Given that this would be a breaking change, it will probably have to be a warning.\r\n\r\nActual behavior\r\n---------------\r\nOnly the last key is used when there are duplicate keys\r\n```powershell\r\nkey\r\n---\r\nvalue2\r\n```\r\n\r\nEnvironment data\r\n----------------\r\n\r\n\u003c!-- provide the output of $PSVersionTable --\u003e\r\n\r\n```powershell\r\n\u003e $PSVersionTable\r\nName Value\r\n---- -----\r\nPSVersion 6.0.0-beta.8\r\nPSEdition Core\r\nGitCommitId v6.0.0-beta.8-20-g0d5a6fbd71c31043d0eda82f7b0e2d4fb0431322\r\nOS Microsoft Windows 10.0.15063\r\nPlatform Win32NT\r\nPSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}\r\nPSRemotingProtocolVersion 2.3\r\nSerializationVersion 1.1.0.1\r\nWSManStackVersion 3.0\r\n\r\n```\r\n","author":{"url":"https://github.com/bergmeister","@type":"Person","name":"bergmeister"},"datePublished":"2017-10-22T20:21:10.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":12},"url":"https://github.com/5199/PowerShell/issues/5199"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:8e09dba7-19bf-91b0-4321-2eff5f93fa0f |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | E764:2FCF6D:22B8656:32A7700:6A54F80B |
| html-safe-nonce | 7c354b54370f9c1e13c82db847cbed42573fb9425e248a0a7fd9662cc12524dc |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFNzY0OjJGQ0Y2RDoyMkI4NjU2OjMyQTc3MDA6NkE1NEY4MEIiLCJ2aXNpdG9yX2lkIjoiODE4NDE3NDU3MjE3NTk0Nzc4OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | c739f9e9f9120ce3202a2966abf709c07c246e9b4c358fb6a3bb7d6d5a3770b4 |
| hovercard-subject-tag | issue:267495548 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/PowerShell/PowerShell/5199/issue_layout |
| twitter:image | https://opengraph.githubassets.com/d0d2beb61bd884f9e9064822c314a14880f49f431942590f7ca21d71884b21ca/PowerShell/PowerShell/issues/5199 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/d0d2beb61bd884f9e9064822c314a14880f49f431942590f7ca21d71884b21ca/PowerShell/PowerShell/issues/5199 |
| og:image:alt | If the JSON contains duplicate keys with the same casing, then only the last key is used and the others are silently thrown away. The code in JsonObject.cs here actually caters for this case and wo... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | bergmeister |
| hostname | github.com |
| expected-hostname | github.com |
| None | eae2aab99907699a22d2c8449aa683ca74454fca87211b98f7c7b722086b2839 |
| turbo-cache-control | no-preview |
| go-import | github.com/PowerShell/PowerShell git https://github.com/PowerShell/PowerShell.git |
| octolytics-dimension-user_id | 11524380 |
| octolytics-dimension-user_login | PowerShell |
| octolytics-dimension-repository_id | 49609581 |
| octolytics-dimension-repository_nwo | PowerShell/PowerShell |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 49609581 |
| octolytics-dimension-repository_network_root_nwo | PowerShell/PowerShell |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | dd26d3896747463b6bd56edd5e290edb595c3cbc |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width